diff options
author | Arnaud Fietzke <fietzke@itestra.de> | 2013-11-21 10:16:41 +0100 |
---|---|---|
committer | Arnaud Fietzke <fietzke@itestra.de> | 2013-11-26 17:03:31 +0100 |
commit | c7089a400b773a758c88aeb3a8fddcbbaf992a30 (patch) | |
tree | 8c4ce1b328940281644c0ab1a73dbc1f7da2b989 | |
parent | 4dda016f2b16baf1d7ea468557c848b1453e8c03 (diff) | |
download | genivi-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.cpp | 9 |
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; } |