destroy resources first, then the global

The clients see the proxy disappear before the global is removed.
This commit is contained in:
Wim Taymans 2019-05-23 10:11:56 +02:00
parent f57a806cf8
commit e20857ccd1
3 changed files with 12 additions and 8 deletions

View file

@ -397,15 +397,15 @@ void pw_client_destroy(struct pw_client *client)
if (client->registered) if (client->registered)
spa_list_remove(&client->link); spa_list_remove(&client->link);
pw_map_for_each(&client->objects, destroy_resource, client);
if (client->global) { if (client->global) {
spa_hook_remove(&client->global_listener); spa_hook_remove(&client->global_listener);
pw_global_destroy(client->global); 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_log_debug("client %p: free", impl);
pw_client_emit_free(client);
pw_map_clear(&client->objects); pw_map_clear(&client->objects);
pw_array_clear(&impl->permissions); pw_array_clear(&impl->permissions);

View file

@ -563,6 +563,7 @@ void pw_core_destroy(struct pw_core *core)
struct pw_module *module; struct pw_module *module;
struct pw_device *device; struct pw_device *device;
struct pw_remote *remote; struct pw_remote *remote;
struct pw_resource *resource;
struct pw_node *node; struct pw_node *node;
pw_log_debug("core %p: destroy", core); 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) spa_list_consume(node, &core->node_list, link)
pw_node_destroy(node); 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) spa_list_consume(global, &core->global_list, link)
pw_global_destroy(global); pw_global_destroy(global);
pw_log_debug("core %p: free", core);
pw_core_emit_free(core); pw_core_emit_free(core);
pw_data_loop_destroy(core->data_loop_impl); pw_data_loop_destroy(core->data_loop_impl);
pw_properties_free(core->properties); pw_properties_free(core->properties);
pw_map_clear(&core->globals);
if (impl->dbus_handle) if (impl->dbus_handle)
pw_unload_spa_handle(impl->dbus_handle); pw_unload_spa_handle(impl->dbus_handle);
pw_log_debug("core %p: free", core); pw_map_clear(&core->globals);
free(core); free(core);
} }

View file

@ -370,11 +370,11 @@ void pw_global_destroy(struct pw_global *global)
pw_log_debug("global %p: destroy %u", global, global->id); pw_log_debug("global %p: destroy %u", global, global->id);
pw_global_emit_destroy(global); pw_global_emit_destroy(global);
global_unregister(global);
spa_list_consume(resource, &global->resource_list, link) spa_list_consume(resource, &global->resource_list, link)
pw_resource_destroy(resource); pw_resource_destroy(resource);
global_unregister(global);
pw_log_debug("global %p: free", global); pw_log_debug("global %p: free", global);
pw_global_emit_free(global); pw_global_emit_free(global);