|
|
3e52db6 |
commit 22b493d3523140e14df433cd8a49292b7f73f21c
|
|
|
3e52db6 |
Author: Peter Seiderer <Peter.Seiderer@gmx.de>
|
|
|
3e52db6 |
Date: Sat May 11 07:49:47 2013 +0200
|
|
|
3e52db6 |
|
|
|
3e52db6 |
Fix multiple calls to QDBusPendingReply::waitForFinished on separate objects
|
|
|
3e52db6 |
|
|
|
3e52db6 |
QTBUG-27809
|
|
|
3e52db6 |
|
|
|
3e52db6 |
Change-Id: If1691052ed1542e0e865c83df7b5737761a2bc86
|
|
|
3e52db6 |
|
|
|
3e52db6 |
diff --git a/src/dbus/qdbusintegrator.cpp b/src/dbus/qdbusintegrator.cpp
|
|
|
3e52db6 |
index 96e4a12..1007f1a 100644
|
|
|
3e52db6 |
--- a/src/dbus/qdbusintegrator.cpp
|
|
|
3e52db6 |
+++ b/src/dbus/qdbusintegrator.cpp
|
|
|
3e52db6 |
@@ -1774,14 +1774,11 @@ void QDBusConnectionPrivate::waitForFinished(QDBusPendingCallPrivate *pcall)
|
|
|
3e52db6 |
pcall->waitForFinishedCondition.wait(&pcall->mutex);
|
|
|
3e52db6 |
} else {
|
|
|
3e52db6 |
pcall->waitingForFinished = true;
|
|
|
3e52db6 |
- pcall->mutex.unlock();
|
|
|
3e52db6 |
-
|
|
|
3e52db6 |
{
|
|
|
3e52db6 |
QDBusDispatchLocker locker(PendingCallBlockAction, this);
|
|
|
3e52db6 |
q_dbus_pending_call_block(pcall->pending);
|
|
|
3e52db6 |
- // QDBusConnectionPrivate::processFinishedCall() is called automatically
|
|
|
3e52db6 |
+ processFinishedCall(pcall);
|
|
|
3e52db6 |
}
|
|
|
3e52db6 |
- pcall->mutex.lock();
|
|
|
3e52db6 |
}
|
|
|
3e52db6 |
}
|
|
|
3e52db6 |
|
|
|
3e52db6 |
@@ -1789,8 +1786,6 @@ void QDBusConnectionPrivate::processFinishedCall(QDBusPendingCallPrivate *call)
|
|
|
3e52db6 |
{
|
|
|
3e52db6 |
QDBusConnectionPrivate *connection = const_cast<QDBusConnectionPrivate *>(call->connection);
|
|
|
3e52db6 |
|
|
|
3e52db6 |
- QMutexLocker locker(&call->mutex);
|
|
|
3e52db6 |
-
|
|
|
3e52db6 |
QDBusMessage &msg = call->replyMessage;
|
|
|
3e52db6 |
if (call->pending) {
|
|
|
3e52db6 |
// decode the message
|
|
|
3e52db6 |
@@ -1824,7 +1819,8 @@ void QDBusConnectionPrivate::processFinishedCall(QDBusPendingCallPrivate *call)
|
|
|
3e52db6 |
q_dbus_pending_call_unref(call->pending);
|
|
|
3e52db6 |
call->pending = 0;
|
|
|
3e52db6 |
|
|
|
3e52db6 |
- locker.unlock();
|
|
|
3e52db6 |
+ if (call->waitingForFinished)
|
|
|
3e52db6 |
+ call->waitForFinishedCondition.wakeAll();
|
|
|
3e52db6 |
|
|
|
3e52db6 |
// Are there any watchers?
|
|
|
3e52db6 |
if (call->watcherHelper)
|
|
|
3e52db6 |
@@ -2009,7 +2005,6 @@ QDBusPendingCallPrivate *QDBusConnectionPrivate::sendWithReplyAsync(const QDBusM
|
|
|
3e52db6 |
q_dbus_message_unref(msg);
|
|
|
3e52db6 |
|
|
|
3e52db6 |
pcall->pending = pending;
|
|
|
3e52db6 |
- q_dbus_pending_call_set_notify(pending, qDBusResultReceived, pcall, 0);
|
|
|
3e52db6 |
|
|
|
3e52db6 |
return pcall;
|
|
|
3e52db6 |
} else {
|