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)
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);

View file

@ -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);
}

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_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);