From e20857ccd1091caf26bae95bc6510cf5df4e998a Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Thu, 23 May 2019 10:11:56 +0200 Subject: [PATCH] destroy resources first, then the global The clients see the proxy disappear before the global is removed. --- src/pipewire/client.c | 6 +++--- src/pipewire/core.c | 10 +++++++--- src/pipewire/global.c | 4 ++-- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/pipewire/client.c b/src/pipewire/client.c index a6dd8f46c..ae17d14bc 100644 --- a/src/pipewire/client.c +++ b/src/pipewire/client.c @@ -397,15 +397,15 @@ void pw_client_destroy(struct pw_client *client) if (client->registered) spa_list_remove(&client->link); + pw_map_for_each(&client->objects, destroy_resource, client); + if (client->global) { spa_hook_remove(&client->global_listener); pw_global_destroy(client->global); } - pw_map_for_each(&client->objects, destroy_resource, client); - - pw_client_emit_free(client); pw_log_debug("client %p: free", impl); + pw_client_emit_free(client); pw_map_clear(&client->objects); pw_array_clear(&impl->permissions); diff --git a/src/pipewire/core.c b/src/pipewire/core.c index e2f31679a..0d4b71590 100644 --- a/src/pipewire/core.c +++ b/src/pipewire/core.c @@ -563,6 +563,7 @@ void pw_core_destroy(struct pw_core *core) struct pw_module *module; struct pw_device *device; struct pw_remote *remote; + struct pw_resource *resource; struct pw_node *node; pw_log_debug("core %p: destroy", core); @@ -582,21 +583,24 @@ void pw_core_destroy(struct pw_core *core) spa_list_consume(node, &core->node_list, link) pw_node_destroy(node); + spa_list_consume(resource, &core->registry_resource_list, link) + pw_resource_destroy(resource); + spa_list_consume(global, &core->global_list, link) pw_global_destroy(global); + pw_log_debug("core %p: free", core); pw_core_emit_free(core); pw_data_loop_destroy(core->data_loop_impl); pw_properties_free(core->properties); - pw_map_clear(&core->globals); - if (impl->dbus_handle) pw_unload_spa_handle(impl->dbus_handle); - pw_log_debug("core %p: free", core); + pw_map_clear(&core->globals); + free(core); } diff --git a/src/pipewire/global.c b/src/pipewire/global.c index 41572f95f..8ac7ace36 100644 --- a/src/pipewire/global.c +++ b/src/pipewire/global.c @@ -370,11 +370,11 @@ void pw_global_destroy(struct pw_global *global) pw_log_debug("global %p: destroy %u", global, global->id); pw_global_emit_destroy(global); - global_unregister(global); - spa_list_consume(resource, &global->resource_list, link) pw_resource_destroy(resource); + global_unregister(global); + pw_log_debug("global %p: free", global); pw_global_emit_free(global);