diff --git a/dbus/dbus-connection.c b/dbus/dbus-connection.c index 2b0a5507..c525b6dc 100644 --- a/dbus/dbus-connection.c +++ b/dbus/dbus-connection.c @@ -2325,10 +2325,11 @@ complete_pending_call_and_unlock (DBusConnection *connection, { _dbus_pending_call_set_reply_unlocked (pending, message); _dbus_pending_call_ref_unlocked (pending); /* in case there's no app with a ref held */ + _dbus_pending_call_start_completion_unlocked(pending); _dbus_connection_detach_pending_call_and_unlock (connection, pending); - + /* Must be called unlocked since it invokes app callback */ - _dbus_pending_call_complete (pending); + _dbus_pending_call_finish_completion (pending); dbus_pending_call_unref (pending); } diff --git a/dbus/dbus-pending-call-internal.h b/dbus/dbus-pending-call-internal.h index a6d7fba7..4f379b4f 100644 --- a/dbus/dbus-pending-call-internal.h +++ b/dbus/dbus-pending-call-internal.h @@ -41,7 +41,10 @@ void _dbus_pending_call_set_reply_serial_unlocked (DBusPendingCal DBusConnection * _dbus_pending_call_get_connection_and_lock (DBusPendingCall *pending); DBusConnection * _dbus_pending_call_get_connection_unlocked (DBusPendingCall *pending); dbus_bool_t _dbus_pending_call_get_completed_unlocked (DBusPendingCall *pending); -void _dbus_pending_call_complete (DBusPendingCall *pending); + +void _dbus_pending_call_start_completion_unlocked (DBusPendingCall *pending); +void _dbus_pending_call_finish_completion (DBusPendingCall *pending); + void _dbus_pending_call_set_reply_unlocked (DBusPendingCall *pending, DBusMessage *message); void _dbus_pending_call_queue_timeout_error_unlocked (DBusPendingCall *pending, diff --git a/dbus/dbus-pending-call.c b/dbus/dbus-pending-call.c index be534105..1bc5d1e5 100644 --- a/dbus/dbus-pending-call.c +++ b/dbus/dbus-pending-call.c @@ -194,18 +194,27 @@ _dbus_pending_call_set_reply_unlocked (DBusPendingCall *pending, } /** - * Calls notifier function for the pending call - * and sets the call to completed. + * Sets the pending call to completed * * @param pending the pending call - * */ void -_dbus_pending_call_complete (DBusPendingCall *pending) +_dbus_pending_call_start_completion_unlocked (DBusPendingCall *pending) { _dbus_assert (!pending->completed); pending->completed = TRUE; +} + +/** + * Call the notifier function for the pending call. + * + * @param pending the pending call + */ +void +_dbus_pending_call_finish_completion (DBusPendingCall *pending) +{ + _dbus_assert (pending->completed); if (pending->function) {