diff --git a/src/httpserver.cpp b/src/httpserver.cpp index f78e507112c..fad1db51bec 100644 --- a/src/httpserver.cpp +++ b/src/httpserver.cpp @@ -1084,8 +1084,9 @@ void HTTPServer::DisconnectClients() // First check for idle timeout. We reset the timer when we send and receive data, // but if the server is busy handling a request we should ignore the timeout until // the reply is sent. If we did erase the shared_ptr reference in m_connected - // while the server is busy with a request, there would still be a reference in a worker - // thread keeping the socket open even after "disconnecting". + // while the server is busy with a request, it might be prematurely dropped before + // the response has been sent, or if the HTTPRequest was holding a temporary shared_ptr + // client on a worker thread - it would keep the socket open even after "disconnecting". const bool is_idle{m_rpcservertimeout.count() > 0 && now - client->m_idle_since.load() > m_rpcservertimeout && !client->m_req_busy}; diff --git a/src/httpserver.h b/src/httpserver.h index 6730d3bb2d1..a0e3c2dcbf6 100644 --- a/src/httpserver.h +++ b/src/httpserver.h @@ -331,7 +331,7 @@ private: /** * List of HTTPRemoteClients with connected sockets. * Connections will only be added and removed in the I/O thread, but - * shared pointers may be passed to worker threads to handle requests + * weak pointers may be passed to worker threads to handle requests * and send replies. */ std::vector> m_connected; @@ -477,7 +477,7 @@ private: * Close underlying socket connections for flagged clients * by removing their shared pointer from m_connected. If an HTTPRemoteClient * is busy in a worker thread, its connection will be closed once that - * job is done and the HTTPRequest is out of scope. + * job is done. */ void DisconnectClients(); };