dbus_pending_call_set_notify: don't leave the connection locked on OOM
authorSimon McVittie <simon.mcvittie@collabora.co.uk>
Mon, 25 Jun 2012 11:20:45 +0000 (12:20 +0100)
committerSimon McVittie <simon.mcvittie@collabora.co.uk>
Mon, 25 Jun 2012 14:22:38 +0000 (15:22 +0100)
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=51032
Signed-off-by: Simon McVittie <simon.mcvittie@collabora.co.uk>
Reviewed-by: Lennart Poettering <lennart@poettering.net>
dbus/dbus-pending-call.c

index 8a9d2f4..62c6c74 100644 (file)
@@ -631,6 +631,8 @@ dbus_pending_call_set_notify (DBusPendingCall              *pending,
                               void                         *user_data,
                               DBusFreeFunction              free_user_data)
 {
+  dbus_bool_t ret = FALSE;
+
   _dbus_return_val_if_fail (pending != NULL, FALSE);
 
   CONNECTION_LOCK (pending->connection);
@@ -638,13 +640,15 @@ dbus_pending_call_set_notify (DBusPendingCall              *pending,
   /* could invoke application code! */
   if (!_dbus_pending_call_set_data_unlocked (pending, notify_user_data_slot,
                                              user_data, free_user_data))
-    return FALSE;
+    goto out;
   
   pending->function = function;
+  ret = TRUE;
 
+out:
   CONNECTION_UNLOCK (pending->connection);
   
-  return TRUE;
+  return ret;
 }
 
 /**