From: Manuel Nickschas Date: Thu, 19 Nov 2009 08:17:54 +0000 (+0100) Subject: Don't crash upon core/client timeout disconnect X-Git-Tag: 0.5.1~2 X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=commitdiff_plain;h=b8e34b3c2bfb27733cdfc08b0886cb37535435fc Don't crash upon core/client timeout disconnect Seems Qt 4.6 handles closing of sockets a bit differently. --- diff --git a/src/common/signalproxy.cpp b/src/common/signalproxy.cpp index 82b428ac..17a44c4d 100644 --- a/src/common/signalproxy.cpp +++ b/src/common/signalproxy.cpp @@ -932,6 +932,8 @@ void SignalProxy::setInitData(SyncableObject *obj, const QVariantMap &properties void SignalProxy::sendHeartBeat() { QVariantList heartBeatParams; heartBeatParams << QTime::currentTime(); + QList toClose; + PeerHash::iterator peer = _peers.begin(); while(peer != _peers.end()) { if((*peer)->type() == AbstractPeer::IODevicePeer) { @@ -940,15 +942,18 @@ void SignalProxy::sendHeartBeat() { if(ioPeer->sentHeartBeats > 0) { updateLag(ioPeer, ioPeer->sentHeartBeats * _heartBeatTimer.interval()); } - if(ioPeer->sentHeartBeats > 1) { - qWarning() << "SignalProxy: Disconnecting peer:" << ioPeer->address() - << "(didn't receive a heartbeat for over" << ioPeer->sentHeartBeats * _heartBeatTimer.interval() / 1000 << "seconds)"; - ioPeer->close(); - } else { + if(ioPeer->sentHeartBeats > 1) + toClose.append(ioPeer); + else ioPeer->sentHeartBeats++; - } } - peer++; + ++peer; + } + + foreach(IODevicePeer *ioPeer, toClose) { + qWarning() << "SignalProxy: Disconnecting peer:" << ioPeer->address() + << "(didn't receive a heartbeat for over" << ioPeer->sentHeartBeats * _heartBeatTimer.interval() / 1000 << "seconds)"; + ioPeer->close(); } }