Handle very short netsplits
authorSebastian Goth <seezer@roath.org>
Mon, 24 Aug 2009 16:01:27 +0000 (18:01 +0200)
committerSebastian Goth <seezer@roath.org>
Mon, 24 Aug 2009 16:04:24 +0000 (18:04 +0200)
src/core/netsplit.cpp
src/core/netsplit.h

index 89d27a4..d824d9b 100644 (file)
@@ -23,7 +23,7 @@
 #include <QRegExp>
 
 Netsplit::Netsplit()
-    : _quitMsg("")
+    : _quitMsg(""), _sentQuit(false)
 {
   _discardTimer.setSingleShot(true);
   _joinTimer.setSingleShot(true);
@@ -84,6 +84,10 @@ bool Netsplit::isNetsplit(const QString &quitMessage)
 
 void Netsplit::joinTimeout()
 {
+  if(!_sentQuit) {
+    _quitTimer.stop();
+    quitTimeout();
+  }
   QHash<QString, QStringList>::iterator it;
   for(it = _joins.begin(); it != _joins.end(); ++it)
     emit netsplitJoin(it.key(), it.value(),_quitMsg);
@@ -97,4 +101,5 @@ void Netsplit::quitTimeout()
   QHash<QString, QStringList>::iterator it;
   for(it = _quits.begin(); it != _quits.end(); ++it)
     emit netsplitQuit(it.key(), it.value(),_quitMsg);
+  _sentQuit = true;
 }
index 135a3f0..d9b2cf2 100644 (file)
@@ -93,7 +93,7 @@ private:
   QString _quitMsg;
   QHash<QString, QStringList> _joins;
   QHash<QString, QStringList> _quits;
-
+  bool _sentQuit;
   QTimer _joinTimer;
   QTimer _quitTimer;
   QTimer _discardTimer;