diff options
Diffstat (limited to 'dbus/dbus-connection.c')
-rw-r--r-- | dbus/dbus-connection.c | 38 |
1 files changed, 17 insertions, 21 deletions
diff --git a/dbus/dbus-connection.c b/dbus/dbus-connection.c index c9c09dfb..b65b541e 100644 --- a/dbus/dbus-connection.c +++ b/dbus/dbus-connection.c @@ -1749,20 +1749,15 @@ dbus_connection_send_with_reply (DBusConnection *connection, reply = dbus_message_new_error (message, DBUS_ERROR_NO_REPLY, "No reply within specified time"); - if (!reply) - { - CONNECTION_UNLOCK (connection); - dbus_pending_call_unref (pending); - return FALSE; - } + if (reply == NULL) + goto error; reply_link = _dbus_list_alloc_link (reply); - if (!reply) + if (reply_link == NULL) { CONNECTION_UNLOCK (connection); dbus_message_unref (reply); - dbus_pending_call_unref (pending); - return FALSE; + goto error_unlocked; } pending->timeout_link = reply_link; @@ -1772,29 +1767,30 @@ dbus_connection_send_with_reply (DBusConnection *connection, * Also, add the timeout. */ if (!_dbus_connection_attach_pending_call_unlocked (connection, - pending)) - { - CONNECTION_UNLOCK (connection); - dbus_pending_call_unref (pending); - return FALSE; - } + pending)) + goto error; if (!_dbus_connection_send_unlocked (connection, message, NULL)) { _dbus_connection_detach_pending_call_and_unlock (connection, - pending); - return FALSE; + pending); + goto error_unlocked; } if (pending_return) - { - dbus_pending_call_ref (pending); - *pending_return = pending; - } + *pending_return = pending; + else + dbus_pending_call_unref (pending); CONNECTION_UNLOCK (connection); return TRUE; + + error: + CONNECTION_UNLOCK (connection); + error_unlocked: + dbus_pending_call_unref (pending); + return FALSE; } static DBusMessage* |