summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArnaud Fietzke <fietzke@itestra.de>2013-11-21 10:16:41 +0100
committerArnaud Fietzke <fietzke@itestra.de>2013-11-26 17:03:31 +0100
commitc7089a400b773a758c88aeb3a8fddcbbaf992a30 (patch)
tree8c4ce1b328940281644c0ab1a73dbc1f7da2b989
parent4dda016f2b16baf1d7ea468557c848b1453e8c03 (diff)
downloadgenivi-common-api-dbus-runtime-c7089a400b773a758c88aeb3a8fddcbbaf992a30.tar.gz
Backport of fix for GLIPCI-165.
Once resumeDispatching() is called, readWriteDispatch() may dispatch the reply, causing replyAsyncHandler to be deleted. Conflicts: src/CommonAPI/DBus/DBusConnection.cpp
-rw-r--r--src/CommonAPI/DBus/DBusConnection.cpp9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/CommonAPI/DBus/DBusConnection.cpp b/src/CommonAPI/DBus/DBusConnection.cpp
index 3b58241..fc35997 100644
--- a/src/CommonAPI/DBus/DBusConnection.cpp
+++ b/src/CommonAPI/DBus/DBusConnection.cpp
@@ -414,6 +414,7 @@ std::future<CallStatus> DBusConnection::sendDBusMessageWithReplyAsync(
DBusPendingCall* libdbusPendingCall;
dbus_bool_t libdbusSuccess;
+ suspendDispatching();
libdbusSuccess = dbus_connection_send_with_reply(
libdbusConnection_,
dbusMessage.libdbusMessage_,
@@ -422,6 +423,7 @@ std::future<CallStatus> DBusConnection::sendDBusMessageWithReplyAsync(
if (!libdbusSuccess || !libdbusPendingCall) {
dbusMessageReplyAsyncHandler->onDBusMessageReply(CallStatus::CONNECTION_FAILED, dbusMessage);
+ resumeDispatching();
return dbusMessageReplyAsyncHandler->getFuture();
}
@@ -434,10 +436,15 @@ std::future<CallStatus> DBusConnection::sendDBusMessageWithReplyAsync(
if (!libdbusSuccess) {
dbusMessageReplyAsyncHandler->onDBusMessageReply(CallStatus::OUT_OF_MEMORY, dbusMessage);
dbus_pending_call_unref(libdbusPendingCall);
+ resumeDispatching();
return dbusMessageReplyAsyncHandler->getFuture();
}
- return dbusMessageReplyAsyncHandler.release()->getFuture();
+ std::future<CallStatus> result = dbusMessageReplyAsyncHandler.release()->getFuture();
+
+ resumeDispatching();
+
+ return result;
}