]> git.ipfire.org Git - thirdparty/dbus.git/commitdiff
Bug 15635: Hold a reference during read/write dispatch (Scott James Remnant)
authorColin Walters <walters@verbum.org>
Sat, 31 May 2008 00:41:49 +0000 (20:41 -0400)
committerColin Walters <walters@verbum.org>
Sat, 31 May 2008 00:41:49 +0000 (20:41 -0400)
* dbus/dbus-connection.c (_dbus_connection_read_write_dispatch):
  Reference the D-Bus connection during the function call since we
  call other functions that may free the last reference and we
  still expect to be able to check the connection after they return
  to decide our own return value.

dbus/dbus-connection.c

index 1f427dd3b8c7a655c7607e4a50f092bad1661de5..f2902ed4d2a67cb0cc55280664ab5ed8af5a89a1 100644 (file)
@@ -3417,6 +3417,12 @@ _dbus_connection_read_write_dispatch (DBusConnection *connection,
 {
   DBusDispatchStatus dstatus;
   dbus_bool_t no_progress_possible;
+
+  /* Need to grab a ref here in case we're a private connection and
+   * the user drops the last ref in a handler we call; see bug 
+   * https://bugs.freedesktop.org/show_bug.cgi?id=15635
+   */
+  dbus_connection_ref (connection);
   
   dstatus = dbus_connection_get_dispatch_status (connection);
 
@@ -3456,7 +3462,11 @@ _dbus_connection_read_write_dispatch (DBusConnection *connection,
       connection->disconnect_message_link == NULL;
   else
     no_progress_possible = _dbus_connection_get_is_connected_unlocked (connection);
+
   CONNECTION_UNLOCK (connection);
+
+  dbus_connection_unref (connection);
+
   return !no_progress_possible; /* TRUE if we can make more progress */
 }