From: Shane Synan Date: Tue, 7 Jun 2016 09:43:38 +0000 (-0400) Subject: Don't log socket error when disconnecting X-Git-Tag: 0.12.5~87 X-Git-Url: https://git.quassel-irc.org/?a=commitdiff_plain;h=ddf95ecafbf6d81eb9f10dc5aec588773015e71c;p=quassel.git Don't log socket error when disconnecting Add flag _disconnectExpected, set to true in disconnectFromIrc() in order to ignore RemoteHostClosed socket errors. It's not really an error when it's expected behavior, no? (cherry picked from commit ff2aeb5dad907f833b4311243213e5ee9fe12dfc) --- diff --git a/src/core/corenetwork.cpp b/src/core/corenetwork.cpp index 8c03dc83..65850c3e 100644 --- a/src/core/corenetwork.cpp +++ b/src/core/corenetwork.cpp @@ -36,6 +36,7 @@ CoreNetwork::CoreNetwork(const NetworkId &networkid, CoreSession *session) _userInputHandler(new CoreUserInputHandler(this)), _autoReconnectCount(0), _quitRequested(false), + _disconnectExpected(false), _previousConnectionAttemptFailed(false), _lastUsedServerIndex(0), @@ -210,6 +211,8 @@ void CoreNetwork::connectToIrc(bool reconnecting) void CoreNetwork::disconnectFromIrc(bool requested, const QString &reason, bool withReconnect, bool forceImmediate) { + // Disconnecting from the network, should expect a socket close or error + _disconnectExpected = true; _quitRequested = requested; // see socketDisconnected(); if (!withReconnect) { _autoReconnectTimer.stop(); @@ -440,8 +443,10 @@ void CoreNetwork::socketHasData() void CoreNetwork::socketError(QAbstractSocket::SocketError error) { - if (_quitRequested && error == QAbstractSocket::RemoteHostClosedError) + // Ignore socket closed errors if expected + if (_disconnectExpected && error == QAbstractSocket::RemoteHostClosedError) { return; + } _previousConnectionAttemptFailed = true; qWarning() << qPrintable(tr("Could not connect to %1 (%2)").arg(networkName(), socket.errorString())); @@ -530,6 +535,8 @@ void CoreNetwork::socketDisconnected() setConnected(false); emit disconnected(networkId()); emit socketDisconnected(identityPtr(), localAddress(), localPort(), peerAddress(), peerPort()); + // Reset disconnect expectations + _disconnectExpected = false; if (_quitRequested) { _quitRequested = false; setConnectionState(Network::Disconnected); @@ -574,6 +581,7 @@ void CoreNetwork::networkInitialized() { setConnectionState(Network::Initialized); setConnected(true); + _disconnectExpected = false; _quitRequested = false; if (useAutoReconnect()) { diff --git a/src/core/corenetwork.h b/src/core/corenetwork.h index b612c13c..51eb31a8 100644 --- a/src/core/corenetwork.h +++ b/src/core/corenetwork.h @@ -283,6 +283,10 @@ private: bool _quitRequested; QString _quitReason; + bool _disconnectExpected; /// If true, connection is quitting, expect a socket close + // This avoids logging a spurious RemoteHostClosedError whenever disconnect is called without + // specifying a permanent (saved to core session) disconnect. + bool _previousConnectionAttemptFailed; int _lastUsedServerIndex;