Properly handle unlimited IRC reconnection retries
authorManuel Nickschas <sputnick@quassel-irc.org>
Wed, 15 Jul 2009 22:08:52 +0000 (00:08 +0200)
committerManuel Nickschas <sputnick@quassel-irc.org>
Wed, 15 Jul 2009 22:08:52 +0000 (00:08 +0200)
Fixes #743. Also, do the first reconnect retry immediately after disconnect
even with unlimited retries enabled.

src/core/corenetwork.cpp

index b1278ca..81c92cb 100644 (file)
@@ -373,7 +373,7 @@ void CoreNetwork::socketDisconnected() {
     Core::setNetworkConnected(userId(), networkId(), false);
   } else if(_autoReconnectCount != 0) {
     setConnectionState(Network::Reconnecting);
-    if(_autoReconnectCount == autoReconnectRetries())
+    if(_autoReconnectCount == -1 || _autoReconnectCount == autoReconnectRetries())
       doAutoReconnect(); // first try is immediate
     else
       _autoReconnectTimer.start();
@@ -409,7 +409,7 @@ void CoreNetwork::networkInitialized() {
 
   if(useAutoReconnect()) {
     // reset counter
-    _autoReconnectCount = autoReconnectRetries();
+    _autoReconnectCount = unlimitedReconnectRetries() ? -1 : autoReconnectRetries();
   }
 
   // restore away state
@@ -520,8 +520,8 @@ void CoreNetwork::doAutoReconnect() {
     qWarning() << "CoreNetwork::doAutoReconnect(): Cannot reconnect while not being disconnected!";
     return;
   }
-  if(_autoReconnectCount > 0)
-    _autoReconnectCount--;
+  if(_autoReconnectCount > 0 || _autoReconnectCount == -1)
+    _autoReconnectCount--; // -2 means we delay the next reconnect
   connectToIrc(true);
 }