diff options
author | Simon Hausmann <simon.hausmann@digia.com> | 2014-01-03 14:29:41 +0100 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@digia.com> | 2014-01-03 14:30:21 +0100 |
commit | b5ab7ee0d78a30863e3d11bd2ba10ba5f4854bf5 (patch) | |
tree | d4ab3471f9f92e153fe320e0435a5740c794746b /src/dbus | |
parent | ad9554a7f2d4b8a2af3efabc7bc69b9a0ae3751d (diff) | |
parent | aff3e3c4a20aae52fdafaede8dfcbde2bc990104 (diff) |
Merge remote-tracking branch 'origin/stable' into dev
Change-Id: Id13badc270db98806048753fd7fb658aa17f1ede
Diffstat (limited to 'src/dbus')
-rw-r--r-- | src/dbus/qdbusconnection_p.h | 2 | ||||
-rw-r--r-- | src/dbus/qdbusintegrator.cpp | 9 |
2 files changed, 11 insertions, 0 deletions
diff --git a/src/dbus/qdbusconnection_p.h b/src/dbus/qdbusconnection_p.h index 515eab6dfe..350e49a50d 100644 --- a/src/dbus/qdbusconnection_p.h +++ b/src/dbus/qdbusconnection_p.h @@ -178,6 +178,7 @@ public: typedef QMultiHash<QString, SignalHook> SignalHookHash; typedef QHash<QString, QDBusMetaObject* > MetaObjectHash; typedef QHash<QByteArray, int> MatchRefCountHash; + typedef QList<QDBusPendingCallPrivate*> PendingCallList; struct WatchedServiceData { WatchedServiceData() : refcount(0) {} @@ -316,6 +317,7 @@ public: MatchRefCountHash matchRefCounts; ObjectTreeNode rootNode; MetaObjectHash cachedMetaObjects; + PendingCallList pendingCalls; QMutex callDeliveryMutex; QDBusCallDeliveryEvent *callDeliveryState; // protected by the callDeliveryMutex mutex diff --git a/src/dbus/qdbusintegrator.cpp b/src/dbus/qdbusintegrator.cpp index d797fbfb99..77de09d197 100644 --- a/src/dbus/qdbusintegrator.cpp +++ b/src/dbus/qdbusintegrator.cpp @@ -1092,6 +1092,9 @@ void QDBusConnectionPrivate::closeConnection() ; } } + + qDeleteAll(pendingCalls); + qDBusDebug() << this << "Disconnected"; } @@ -1834,6 +1837,8 @@ void QDBusConnectionPrivate::processFinishedCall(QDBusPendingCallPrivate *call) QMutexLocker locker(&call->mutex); + connection->pendingCalls.removeOne(call); + QDBusMessage &msg = call->replyMessage; if (call->pending) { // decode the message @@ -2094,6 +2099,10 @@ QDBusPendingCallPrivate *QDBusConnectionPrivate::sendWithReplyAsync(const QDBusM pcall->pending = pending; q_dbus_pending_call_set_notify(pending, qDBusResultReceived, pcall, 0); + // DBus won't notify us when a peer disconnects so we need to track these ourselves + if (mode == QDBusConnectionPrivate::PeerMode) + pendingCalls.append(pcall); + return pcall; } else { // we're probably disconnected at this point |