diff options
Diffstat (limited to 'dbus/dbus-connection.c')
-rw-r--r-- | dbus/dbus-connection.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/dbus/dbus-connection.c b/dbus/dbus-connection.c index 1f427dd3..f2902ed4 100644 --- a/dbus/dbus-connection.c +++ b/dbus/dbus-connection.c @@ -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 */ } |