X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fcommon%2Fsignalproxy.cpp;h=1d8c956daf4e92a9e1013f05a73c212e85ac7f31;hb=78b37c1a0610d9a4fb26ba0dec7337d6f7960041;hp=bcc639fad7979d53c017b0854e20234d179efc8e;hpb=53861faa5551606eea31588b65ba501b24fb2e1a;p=quassel.git diff --git a/src/common/signalproxy.cpp b/src/common/signalproxy.cpp index bcc639fa..1d8c956d 100644 --- a/src/common/signalproxy.cpp +++ b/src/common/signalproxy.cpp @@ -173,6 +173,9 @@ int SignalProxy::SignalRelay::qt_metacall(QMetaObject::Call _c, int _id, void ** // ================================================== // SignalProxy // ================================================== + +thread_local SignalProxy *SignalProxy::_current{nullptr}; + SignalProxy::SignalProxy(QObject *parent) : QObject(parent) { @@ -204,6 +207,8 @@ SignalProxy::~SignalProxy() _syncSlave.clear(); removeAllPeers(); + + _current = nullptr; } @@ -221,9 +226,6 @@ void SignalProxy::setProxyMode(ProxyMode mode) initClient(); } -thread_local SignalProxy *SignalProxy::_current; - - void SignalProxy::init() { _heartBeatInterval = 0; @@ -516,15 +518,9 @@ void SignalProxy::stopSynchronize(SyncableObject *obj) template void SignalProxy::dispatch(const T &protoMessage) { - for (auto peer : _peerMap.values()) { - _targetPeer = peer; - - if (peer->isOpen()) - peer->dispatch(protoMessage); - else - QCoreApplication::postEvent(this, new ::RemovePeerEvent(peer)); + for (auto&& peer : _peerMap.values()) { + dispatch(peer, protoMessage); } - _targetPeer = nullptr; } @@ -843,6 +839,8 @@ QVariantList SignalProxy::peerData() { data["remoteAddress"] = peer->address(); data["connectedSince"] = peer->connectedSince(); data["secure"] = peer->isSecure(); + int features = peer->features(); + data["features"] = features; result << data; } return result;