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) {