]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[#4696] Added a register_ flag
authorFrancis Dupont <fdupont@isc.org>
Fri, 24 Jul 2026 10:46:34 +0000 (12:46 +0200)
committerFrancis Dupont <fdupont@isc.org>
Wed, 5 Aug 2026 16:35:38 +0000 (18:35 +0200)
changelog_unreleased/4696-dhcp_delete_external_socket_not_found-on-shutdown [new file with mode: 0644]
src/lib/http/connection.cc
src/lib/http/connection.h

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 (file)
index 0000000..30141f9
--- /dev/null
@@ -0,0 +1,4 @@
+[fbug]         fdupont
+       Fixed spurious warnings emitted on shutdown when some
+       HTTP socket listen for new connections.
+       (Gitlab #4344)
index ec7ec74bfef683e8f75bd89b70864131b8948602..8841787ece503ac6a2068f336210ad4c040c4094 100644 (file)
@@ -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<SocketCallback>(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);
index fd24a2b793c31ddd6b8723e06f8c0124a3478506..c8b7cdb4ebead0d3770e696f1023f3c1cc1facf4 100644 (file)
@@ -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