From e95dffeaa5d005caa689f8fe34678b95f8fc6736 Mon Sep 17 00:00:00 2001 From: Manuel Nickschas Date: Mon, 18 Feb 2008 01:06:01 +0000 Subject: [PATCH 1/1] Stop core from crashing when exiting while clients are still connected. --- src/common/signalproxy.cpp | 6 ++++++ src/core/core.cpp | 3 ++- version.inc | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) 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; -- 2.20.1