mirror of
https://gitlab.freedesktop.org/dbus/dbus.git
synced 2026-05-07 14:28:01 +02:00
Bug 15635: Hold a reference during read/write dispatch (Scott James Remnant)
* 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.
This commit is contained in:
parent
0e2a099b55
commit
ef41cd3110
1 changed files with 10 additions and 0 deletions
|
|
@ -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 */
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue