mirror of
https://gitlab.freedesktop.org/dbus/dbus.git
synced 2026-01-17 04:40:22 +01:00
Make sure a pending call timeout isn't assumed.
* dbus/dbus-connection.c (_dbus_connection_attach_pending_call_unlocked):
Don't assume that the pending call has a timeout.
(connection_timeout_and_complete_all_pending_call_unlocked): check that
the timeout was actually added before removing it; this safeguards us
if the pending call doesn't have a timeout.
Signed-off-by: Scott James Remnant <scott@ubuntu.com>
(cherry picked from commit ba22606c3b)
This commit is contained in:
parent
6eddb6e122
commit
dd63302d72
1 changed files with 29 additions and 14 deletions
|
|
@ -883,21 +883,34 @@ _dbus_connection_attach_pending_call_unlocked (DBusConnection *connection,
|
|||
|
||||
timeout = _dbus_pending_call_get_timeout_unlocked (pending);
|
||||
|
||||
if (!_dbus_connection_add_timeout_unlocked (connection, timeout))
|
||||
return FALSE;
|
||||
|
||||
if (!_dbus_hash_table_insert_int (connection->pending_replies,
|
||||
reply_serial,
|
||||
pending))
|
||||
if (timeout)
|
||||
{
|
||||
_dbus_connection_remove_timeout_unlocked (connection, timeout);
|
||||
if (!_dbus_connection_add_timeout_unlocked (connection, timeout))
|
||||
return FALSE;
|
||||
|
||||
if (!_dbus_hash_table_insert_int (connection->pending_replies,
|
||||
reply_serial,
|
||||
pending))
|
||||
{
|
||||
_dbus_connection_remove_timeout_unlocked (connection, timeout);
|
||||
|
||||
_dbus_pending_call_set_timeout_added_unlocked (pending, FALSE);
|
||||
HAVE_LOCK_CHECK (connection);
|
||||
return FALSE;
|
||||
_dbus_pending_call_set_timeout_added_unlocked (pending, FALSE);
|
||||
HAVE_LOCK_CHECK (connection);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
_dbus_pending_call_set_timeout_added_unlocked (pending, TRUE);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!_dbus_hash_table_insert_int (connection->pending_replies,
|
||||
reply_serial,
|
||||
pending))
|
||||
{
|
||||
HAVE_LOCK_CHECK (connection);
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
_dbus_pending_call_set_timeout_added_unlocked (pending, TRUE);
|
||||
|
||||
_dbus_pending_call_ref_unlocked (pending);
|
||||
|
||||
|
|
@ -2188,8 +2201,10 @@ connection_timeout_and_complete_all_pending_calls_unlocked (DBusConnection *conn
|
|||
|
||||
_dbus_pending_call_queue_timeout_error_unlocked (pending,
|
||||
connection);
|
||||
_dbus_connection_remove_timeout_unlocked (connection,
|
||||
_dbus_pending_call_get_timeout_unlocked (pending));
|
||||
|
||||
if (_dbus_pending_call_is_timeout_added_unlocked (pending))
|
||||
_dbus_connection_remove_timeout_unlocked (connection,
|
||||
_dbus_pending_call_get_timeout_unlocked (pending));
|
||||
_dbus_pending_call_set_timeout_added_unlocked (pending, FALSE);
|
||||
_dbus_hash_iter_remove_entry (&iter);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue