From: Manuel Nickschas Date: Mon, 18 Feb 2008 01:06:01 +0000 (+0000) Subject: Stop core from crashing when exiting while clients are still connected. X-Git-Tag: 0.2.0-alpha1~52 X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=commitdiff_plain;h=e95dffeaa5d005caa689f8fe34678b95f8fc6736 Stop core from crashing when exiting while clients are still connected. --- diff --git a/src/common/signalproxy.cpp b/src/common/signalproxy.cpp index f0c7d0b5..8d9d8b36 100644 --- a/src/common/signalproxy.cpp +++ b/src/common/signalproxy.cpp @@ -200,6 +200,12 @@ SignalProxy::~SignalProxy() { QList senders = _relayHash.keys(); foreach(QObject* sender, senders) detachObject(sender); + + // close peer connections + foreach(QIODevice *device, _peerByteCount.keys()) { + device->close(); + delete device; + } } void SignalProxy::setProxyMode(ProxyMode mode) { diff --git a/src/core/core.cpp b/src/core/core.cpp index c06ca6d0..c0b9a503 100644 --- a/src/core/core.cpp +++ b/src/core/core.cpp @@ -84,7 +84,7 @@ void Core::init() { } Core::~Core() { - foreach(QTcpSocket *socket, blocksizes.keys()) { + foreach(QTcpSocket *socket, blocksizes.keys()) { qDebug() << "disconnecting" << socket << blocksizes.keys(); socket->disconnectFromHost(); // disconnect local (i.e. non-authed) clients } qDeleteAll(sessions); @@ -315,6 +315,7 @@ void Core::clientHasData() { while(SignalProxy::readDataFromDevice(socket, blocksizes[socket], item)) { QVariantMap msg = item.toMap(); processClientMessage(socket, msg); + if(!blocksizes.contains(socket)) break; // this socket is no longer ours to handle! } } diff --git a/version.inc b/version.inc index bbc453f9..3a37ae61 100644 --- a/version.inc +++ b/version.inc @@ -5,7 +5,7 @@ quasselVersion = "0.2.0-pre"; quasselDate = "2008-02-18"; - quasselBuild = 526; + quasselBuild = 528; //! Minimum client build number the core needs clientBuildNeeded = 526;