diff --git a/Net/src/TCPServerDispatcher.cpp b/Net/src/TCPServerDispatcher.cpp index 5cdc4098e..dd36c29b9 100644 --- a/Net/src/TCPServerDispatcher.cpp +++ b/Net/src/TCPServerDispatcher.cpp @@ -96,7 +96,7 @@ void TCPServerDispatcher::release() void TCPServerDispatcher::run() { - AutoPtr guard(this, true); // ensure object stays alive + AutoPtr guard(this, false); // ensure _rc is decreased when function exits int idleTime = (int) _pParams->getThreadIdleTime().totalMilliseconds(); @@ -149,6 +149,10 @@ void TCPServerDispatcher::enqueue(const StreamSocket& socket) { _threadPool.startWithPriority(_pParams->getThreadPriority(), *this, threadName); ++_currentThreads; + // Ensure this object lives at least until run() starts + // Small chance of leaking if threadpool is stopped before this + // work runs, but better than a dangling pointer and crash! + duplicate(); } catch (Poco::Exception&) {