From 2e06b95e5c36c66c6111db53250a28e2ec26198d Mon Sep 17 00:00:00 2001 From: Max-Wilhelm Bruker Date: Wed, 9 Jan 2013 22:28:49 +0100 Subject: [PATCH] deadlock fix --- servatrice/src/serversocketinterface.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/servatrice/src/serversocketinterface.cpp b/servatrice/src/serversocketinterface.cpp index ab64a837..5260b0e6 100644 --- a/servatrice/src/serversocketinterface.cpp +++ b/servatrice/src/serversocketinterface.cpp @@ -72,7 +72,10 @@ ServerSocketInterface::ServerSocketInterface(Servatrice *_server, Servatrice_Dat socket->setSocketOption(QAbstractSocket::LowDelayOption, 1); connect(socket, SIGNAL(readyRead()), this, SLOT(readClient())); connect(socket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(catchSocketError(QAbstractSocket::SocketError))); - connect(this, SIGNAL(outputQueueChanged()), this, SLOT(flushOutputQueue())); + + // Never call flushOutputQueue directly from outputQueueChanged. In case of a socket error, + // it could lead to this object being destroyed while another function is still on the call stack. -> mutex deadlocks etc. + connect(this, SIGNAL(outputQueueChanged()), this, SLOT(flushOutputQueue()), Qt::QueuedConnection); } ServerSocketInterface::~ServerSocketInterface()