From: Francis Dupont Date: Fri, 24 Jul 2026 10:46:34 +0000 (+0200) Subject: [#4696] Added a register_ flag X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fde1f18215d65981f7cfee1f433ce9e578c8d01d;p=thirdparty%2Fkea.git [#4696] Added a register_ flag --- diff --git a/changelog_unreleased/4696-dhcp_delete_external_socket_not_found-on-shutdown b/changelog_unreleased/4696-dhcp_delete_external_socket_not_found-on-shutdown new file mode 100644 index 0000000000..30141f97fc --- /dev/null +++ b/changelog_unreleased/4696-dhcp_delete_external_socket_not_found-on-shutdown @@ -0,0 +1,4 @@ +[fbug] fdupont + Fixed spurious warnings emitted on shutdown when some + HTTP socket listen for new connections. + (Gitlab #4344) diff --git a/src/lib/http/connection.cc b/src/lib/http/connection.cc index ec7ec74bfe..8841787ece 100644 --- a/src/lib/http/connection.cc +++ b/src/lib/http/connection.cc @@ -79,7 +79,7 @@ HttpConnection::HttpConnection(const asiolink::IOServicePtr& io_service, acceptor_(acceptor), connection_pool_(connection_pool), response_creator_(response_creator), acceptor_callback_(callback), use_external_(false), watch_socket_(), defer_shutdown_(false), - closed_(false) { + closed_(false), registered_(false) { if (!tls_context) { tcp_socket_.reset(new asiolink::TCPSocket(io_service)); } else { @@ -133,10 +133,10 @@ HttpConnection::shutdownCallback(const boost::system::error_code&) { if (closed_) { return; } - if (use_external_) { + if (use_external_ && registered_) { IfaceMgr::instance().deleteExternalSocket(tls_socket_->getNative()); closeWatchSocket(); - use_external_ = false; + registered_ = false; } tls_socket_->close(); @@ -150,10 +150,10 @@ HttpConnection::shutdown() { } request_timer_.cancel(); if (tcp_socket_) { - if (use_external_) { + if (use_external_ && registered_) { IfaceMgr::instance().deleteExternalSocket(tcp_socket_->getNative()); closeWatchSocket(); - use_external_ = false; + registered_ = false; } tcp_socket_->close(); closed_ = true; @@ -225,20 +225,20 @@ HttpConnection::close() { } request_timer_.cancel(); if (tcp_socket_) { - if (use_external_) { + if (use_external_ && registered_) { IfaceMgr::instance().deleteExternalSocket(tcp_socket_->getNative()); closeWatchSocket(); - use_external_ = false; + registered_ = false; } tcp_socket_->close(); closed_ = true; return; } if (tls_socket_) { - if (use_external_) { + if (use_external_ && registered_) { IfaceMgr::instance().deleteExternalSocket(tls_socket_->getNative()); closeWatchSocket(); - use_external_ = false; + registered_ = false; } tls_socket_->close(); closed_ = true; @@ -460,6 +460,7 @@ HttpConnection::acceptorCallback(const boost::system::error_code& ec) { } if (use_external_) { + registered_ = true; auto& iface_mgr = IfaceMgr::instance(); if (tcp_socket_) { iface_mgr.addExternalSocket(tcp_socket_->getNative(), 0); diff --git a/src/lib/http/connection.h b/src/lib/http/connection.h index fd24a2b793..c8b7cdb4eb 100644 --- a/src/lib/http/connection.h +++ b/src/lib/http/connection.h @@ -467,6 +467,10 @@ protected: /// @brief Flag which indicates if the connection was already closed /// to avoid multiple close calls. bool closed_; + + /// @brief Flag which indicates if the connection file descriptor + /// was registered as an external socket. + bool registered_; }; } // end of namespace isc::http