From: Marcus Eggenberger Date: Tue, 10 Mar 2009 11:22:34 +0000 (+0100) Subject: tackeling 30 sec ping timeout issues X-Git-Tag: 0.5-rc1~316 X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=commitdiff_plain;h=50b6749c57fab7941f513087d4209d676ae0f6bf tackeling 30 sec ping timeout issues --- diff --git a/src/core/corenetwork.cpp b/src/core/corenetwork.cpp index 4da6dbd9..5fd5ed98 100644 --- a/src/core/corenetwork.cpp +++ b/src/core/corenetwork.cpp @@ -41,6 +41,8 @@ CoreNetwork::CoreNetwork(const NetworkId &networkid, CoreSession *session) _lastUsedServerIndex(0), _lastPingTime(0), + _maxPingCount(3), + _pingCount(0), // TODO make autowho configurable (possibly per-network) _autoWhoEnabled(true), @@ -523,13 +525,14 @@ void CoreNetwork::doAutoReconnect() { void CoreNetwork::sendPing() { uint now = QDateTime::currentDateTime().toTime_t(); - if(_lastPingTime != 0 && now - _lastPingTime <= (uint)(_pingTimer.interval() / 1000) + 1) { + if(_pingCount >= _maxPingCount && now - _lastPingTime <= (uint)(_pingTimer.interval() / 1000) + 1) { // the second check compares the actual elapsed time since the last ping and the pingTimer interval // if the interval is shorter then the actual elapsed time it means that this thread was somehow blocked // and unable to even handle a ping answer. So we ignore those misses. - disconnectFromIrc(false, QString("No Ping reply in %1 seconds.").arg(_pingTimer.interval() / 1000), true /* withReconnect */); + disconnectFromIrc(false, QString("No Ping reply in %1 seconds.").arg(_maxPingCount * _pingTimer.interval() / 1000), true /* withReconnect */); } else { _lastPingTime = now; + _pingCount++; userInputHandler()->handlePing(BufferInfo(), QString()); } } diff --git a/src/core/corenetwork.h b/src/core/corenetwork.h index a0e8c179..dbb8a5e2 100644 --- a/src/core/corenetwork.h +++ b/src/core/corenetwork.h @@ -106,7 +106,7 @@ public slots: Server usedServer() const; - inline void resetPingTimeout() { _lastPingTime = 0; } + inline void resetPingTimeout() { _pingCount = 0; } inline void displayMsg(Message::Type msgType, BufferInfo::Type bufferType, const QString &target, const QString &text, const QString &sender = "", Message::Flags flags = Message::None) { emit displayMsg(networkId(), msgType, bufferType, target, text, sender, flags); @@ -182,6 +182,8 @@ private: QTimer _pingTimer; uint _lastPingTime; + uint _maxPingCount; + uint _pingCount; bool _autoWhoEnabled; QStringList _autoWhoQueue;