mirror of
https://gitlab.freedesktop.org/dbus/dbus.git
synced 2026-05-06 03:28:11 +02:00
containers: Share code for what happens when we lose a connection
This improves test coverage, because bus_container_instance_lost_connection() was previously only called when we failed to set up a connection with a server due to OOM, but it is now also called (instead of being duplicated) when we are told to clean up a connection because it has disconnected. To make sure that connections from containers can never cheat their way into being treated as uncontained, do not set their contained_data_slot to NULL. Signed-off-by: Simon McVittie <smcv@collabora.com> Reviewed-by: Philip Withnall <withnall@endlessm.com> Bug: https://bugs.freedesktop.org/show_bug.cgi?id=107739
This commit is contained in:
parent
64a6366027
commit
2798ecc45f
1 changed files with 8 additions and 9 deletions
|
|
@ -482,7 +482,13 @@ bus_container_instance_lost_connection (BusContainerInstance *instance,
|
|||
if (_dbus_list_remove (&instance->connections, connection))
|
||||
dbus_connection_unref (connection);
|
||||
|
||||
dbus_connection_set_data (connection, contained_data_slot, NULL, NULL);
|
||||
/* We don't set connection's contained_data_slot to NULL, to make sure
|
||||
* that once we have marked a connection as belonging to a container,
|
||||
* there is no going back: even if we somehow keep a reference to it
|
||||
* around, it will never be treated as uncontained. The connection's
|
||||
* reference to the instance will be cleaned up on last-unref, and
|
||||
* the list removal above ensures that the instance does not hold a
|
||||
* circular ref to the connection, so the last-unref will happen. */
|
||||
|
||||
dbus_connection_unref (connection);
|
||||
bus_container_instance_unref (instance);
|
||||
|
|
@ -1433,14 +1439,7 @@ bus_containers_remove_connection (BusContainers *self,
|
|||
instance = connection_get_instance (connection);
|
||||
|
||||
if (instance != NULL)
|
||||
{
|
||||
bus_container_instance_ref (instance);
|
||||
|
||||
if (_dbus_list_remove (&instance->connections, connection))
|
||||
dbus_connection_unref (connection);
|
||||
|
||||
bus_container_instance_unref (instance);
|
||||
}
|
||||
bus_container_instance_lost_connection (instance, connection);
|
||||
|
||||
dbus_connection_unref (connection);
|
||||
#endif /* DBUS_ENABLE_CONTAINERS */
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue