From 3ad27665e859df663e5694f68d278427b5643108 Mon Sep 17 00:00:00 2001 From: Michael Davidsaver Date: Wed, 31 May 2017 15:47:46 +0200 Subject: [PATCH] BlockingTCPTransportCodec::close() wait for threads --- src/remote/codec.cpp | 6 ++++++ src/server/serverContext.cpp | 4 ++++ 2 files changed, 10 insertions(+) diff --git a/src/remote/codec.cpp b/src/remote/codec.cpp index 0b586c5..6889761 100644 --- a/src/remote/codec.cpp +++ b/src/remote/codec.cpp @@ -1032,6 +1032,12 @@ void BlockingTCPTransportCodec::close() { // post close internalPostClose(true); + + // wait for threads + if(!_sendThread.isCurrentThread()) + _sendThread.exitWait(); + if(!_readThread.isCurrentThread()) + _readThread.exitWait(); } } diff --git a/src/server/serverContext.cpp b/src/server/serverContext.cpp index d560dc3..3fe7e26 100644 --- a/src/server/serverContext.cpp +++ b/src/server/serverContext.cpp @@ -306,6 +306,10 @@ void ServerContextImpl::destroyAllTransports() try { transport->close(); + if(!transport.unique()) + LOG(logLevelError, "Closed transport %s still has use_count=%u", + transport->getRemoteName().c_str(), + (unsigned)transport.use_count()); } catch (std::exception &e) {