X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcommon%2Fsignalproxy.cpp;h=e934a05db2647100d44fd918571c4ac0a97039a2;hp=f0c7d0b59edbf2819738844f4d635ea3b4e9b9b4;hb=a2d4978097260c8af1f51ade497071793db2a0c0;hpb=287674ebe59cf8129645722693391f4b4ad8d240;ds=sidebyside diff --git a/src/common/signalproxy.cpp b/src/common/signalproxy.cpp index f0c7d0b5..e934a05d 100644 --- a/src/common/signalproxy.cpp +++ b/src/common/signalproxy.cpp @@ -200,6 +200,12 @@ SignalProxy::~SignalProxy() { QList senders = _relayHash.keys(); foreach(QObject* sender, senders) detachObject(sender); + + // close peer connections + foreach(QIODevice *device, _peerByteCount.keys()) { + device->close(); + delete device; + } } void SignalProxy::setProxyMode(ProxyMode mode) { @@ -311,7 +317,7 @@ void SignalProxy::removePeer(QIODevice* iodev) { qWarning() << "SignalProxy: unknown QIODevice" << iodev; return; } - + // take a last gasp while(true) { QVariant var; @@ -587,6 +593,11 @@ void SignalProxy::dispatchSignal(const RequestType &requestType, const QVariantL void SignalProxy::receivePeerSignal(QIODevice *sender, const QVariant &packedFunc) { QVariantList params(packedFunc.toList()); + if(params.isEmpty()) { + qWarning() << "SignalProxy::receivePeerSignal(): received incompatible Data:" << packedFunc; + return; + } + int callType = params.takeFirst().value(); switch(callType) {