summaryrefslogtreecommitdiffstats
path: root/dbus/dbus-connection.c
diff options
context:
space:
mode:
Diffstat (limited to 'dbus/dbus-connection.c')
-rw-r--r--dbus/dbus-connection.c10
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 */
}