From fd1833906d6d9d3a67c9aa92bffa35d1024e41a9 Mon Sep 17 00:00:00 2001 From: Marcus Eggenberger Date: Wed, 4 Jun 2008 16:36:26 +0200 Subject: [PATCH] fixed a bug that could crash the core on exit --- src/core/networkconnection.cpp | 47 +++++++++++++++++++--------------- 1 file changed, 26 insertions(+), 21 deletions(-) diff --git a/src/core/networkconnection.cpp b/src/core/networkconnection.cpp index 56156e0d..530ee32b 100644 --- a/src/core/networkconnection.cpp +++ b/src/core/networkconnection.cpp @@ -36,40 +36,42 @@ #include "userinputhandler.h" #include "ctcphandler.h" -NetworkConnection::NetworkConnection(Network *network, CoreSession *session) : QObject(network), +NetworkConnection::NetworkConnection(Network *network, CoreSession *session) + : QObject(network), _connectionState(Network::Disconnected), _network(network), _coreSession(session), _ircServerHandler(new IrcServerHandler(this)), _userInputHandler(new UserInputHandler(this)), _ctcpHandler(new CtcpHandler(this)), - _autoReconnectCount(0) + _autoReconnectCount(0), + + _previousConnectionAttemptFailed(false), + _lastUsedServerlistIndex(0), + + // TODO make autowho configurable (possibly per-network) + _autoWhoEnabled(true), + _autoWhoInterval(90), + _autoWhoNickLimit(0), // unlimited + _autoWhoDelay(3), + + // TokenBucket to avaid sending too much at once + _messagesPerSecond(1), + _burstSize(5), + _tokenBucket(5), // init with a full bucket + + // TODO: + // should be 510 (2 bytes are added when writing to the socket) + // maxMsgSize is 510 minus the hostmask which will be added by the server + _maxMsgSize(450) { _autoReconnectTimer.setSingleShot(true); - _previousConnectionAttemptFailed = false; - _lastUsedServerlistIndex = 0; - - // TODO make autowho configurable (possibly per-network) - _autoWhoEnabled = true; - _autoWhoInterval = 90; - _autoWhoNickLimit = 0; // unlimited - _autoWhoDelay = 3; - _autoWhoTimer.setInterval(_autoWhoDelay * 1000); _autoWhoTimer.setSingleShot(false); _autoWhoCycleTimer.setInterval(_autoWhoInterval * 1000); _autoWhoCycleTimer.setSingleShot(false); - // TokenBucket to avaid sending too much at once - _messagesPerSecond = 1; - _burstSize = 5; - _tokenBucket = 5; // init with a full bucket - // TODO: - // should be 510 (2 bytes are added when writing to the socket) - // maxMsgSize is 510 minus the hostmask which will be added by the server - _maxMsgSize = 450; - _tokenBucketTimer.start(_messagesPerSecond * 1000); _tokenBucketTimer.setSingleShot(false); @@ -108,6 +110,7 @@ NetworkConnection::NetworkConnection(Network *network, CoreSession *session) : Q NetworkConnection::~NetworkConnection() { if(connectionState() != Network::Disconnected && connectionState() != Network::Reconnecting) disconnectFromIrc(false); // clean up, but this does not count as requested disconnect! + disconnect(&socket, 0, this, 0); // this keeps the socket from triggering events during clean up delete _ircServerHandler; delete _userInputHandler; delete _ctcpHandler; @@ -256,7 +259,9 @@ void NetworkConnection::disconnectFromIrc(bool requested) { if(socket.state() < QAbstractSocket::ConnectedState) { setConnectionState(Network::Disconnected); socketDisconnected(); - } else socket.disconnectFromHost(); + } else { + socket.disconnectFromHost(); + } if(requested) { emit quitRequested(networkId()); -- 2.20.1