From b8e34b3c2bfb27733cdfc08b0886cb37535435fc Mon Sep 17 00:00:00 2001 From: Manuel Nickschas Date: Thu, 19 Nov 2009 09:17:54 +0100 Subject: [PATCH] Don't crash upon core/client timeout disconnect Seems Qt 4.6 handles closing of sockets a bit differently. --- src/common/signalproxy.cpp | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) 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(); } } -- 2.20.1