mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-13 13:30:05 -05:00
destroy resources first, then the global
This commit is contained in:
parent
c67f903c61
commit
0951a97a36
7 changed files with 33 additions and 18 deletions
|
|
@ -301,18 +301,18 @@ 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);
|
||||||
|
|
||||||
|
spa_list_consume(resource, &client->resource_list, link)
|
||||||
|
pw_resource_destroy(resource);
|
||||||
|
|
||||||
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
spa_list_consume(resource, &client->resource_list, link)
|
|
||||||
pw_resource_destroy(resource);
|
|
||||||
|
|
||||||
pw_map_for_each(&client->objects, destroy_resource, client);
|
|
||||||
|
|
||||||
pw_client_events_free(client);
|
|
||||||
pw_log_debug("client %p: free", impl);
|
pw_log_debug("client %p: free", impl);
|
||||||
|
pw_client_events_free(client);
|
||||||
|
|
||||||
pw_map_clear(&client->objects);
|
pw_map_clear(&client->objects);
|
||||||
pw_map_clear(&client->types);
|
pw_map_clear(&client->types);
|
||||||
|
|
|
||||||
|
|
@ -488,6 +488,7 @@ void pw_core_destroy(struct pw_core *core)
|
||||||
struct pw_global *global;
|
struct pw_global *global;
|
||||||
struct pw_module *module;
|
struct pw_module *module;
|
||||||
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);
|
||||||
|
|
@ -504,9 +505,17 @@ 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(resource, &core->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_map_clear(&core->globals);
|
||||||
|
|
||||||
|
pw_log_debug("core %p: free", core);
|
||||||
pw_core_events_free(core);
|
pw_core_events_free(core);
|
||||||
|
|
||||||
pw_data_loop_destroy(core->data_loop_impl);
|
pw_data_loop_destroy(core->data_loop_impl);
|
||||||
|
|
@ -515,9 +524,6 @@ void pw_core_destroy(struct pw_core *core)
|
||||||
|
|
||||||
pw_properties_free(core->properties);
|
pw_properties_free(core->properties);
|
||||||
|
|
||||||
pw_map_clear(&core->globals);
|
|
||||||
|
|
||||||
pw_log_debug("core %p: free", core);
|
|
||||||
free(core);
|
free(core);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -59,16 +59,22 @@ struct pw_factory *pw_factory_new(struct pw_core *core,
|
||||||
SPA_EXPORT
|
SPA_EXPORT
|
||||||
void pw_factory_destroy(struct pw_factory *factory)
|
void pw_factory_destroy(struct pw_factory *factory)
|
||||||
{
|
{
|
||||||
|
struct pw_resource *resource;
|
||||||
|
|
||||||
pw_log_debug("factory %p: destroy", factory);
|
pw_log_debug("factory %p: destroy", factory);
|
||||||
pw_factory_events_destroy(factory);
|
pw_factory_events_destroy(factory);
|
||||||
|
|
||||||
if (factory->registered)
|
if (factory->registered)
|
||||||
spa_list_remove(&factory->link);
|
spa_list_remove(&factory->link);
|
||||||
|
|
||||||
|
spa_list_consume(resource, &factory->resource_list, link)
|
||||||
|
pw_resource_destroy(resource);
|
||||||
|
|
||||||
if (factory->global) {
|
if (factory->global) {
|
||||||
spa_hook_remove(&factory->global_listener);
|
spa_hook_remove(&factory->global_listener);
|
||||||
pw_global_destroy(factory->global);
|
pw_global_destroy(factory->global);
|
||||||
}
|
}
|
||||||
|
|
||||||
free((char *)factory->info.name);
|
free((char *)factory->info.name);
|
||||||
if (factory->properties)
|
if (factory->properties)
|
||||||
pw_properties_free(factory->properties);
|
pw_properties_free(factory->properties);
|
||||||
|
|
|
||||||
|
|
@ -1348,14 +1348,14 @@ void pw_link_destroy(struct pw_link *link)
|
||||||
|
|
||||||
output_remove(link, link->output);
|
output_remove(link, link->output);
|
||||||
|
|
||||||
|
spa_list_consume(resource, &link->resource_list, link)
|
||||||
|
pw_resource_destroy(resource);
|
||||||
|
|
||||||
if (link->global) {
|
if (link->global) {
|
||||||
spa_hook_remove(&link->global_listener);
|
spa_hook_remove(&link->global_listener);
|
||||||
pw_global_destroy(link->global);
|
pw_global_destroy(link->global);
|
||||||
}
|
}
|
||||||
|
|
||||||
spa_list_consume(resource, &link->resource_list, link)
|
|
||||||
pw_resource_destroy(resource);
|
|
||||||
|
|
||||||
pw_log_debug("link %p: free", impl);
|
pw_log_debug("link %p: free", impl);
|
||||||
pw_link_events_free(link);
|
pw_link_events_free(link);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -294,12 +294,13 @@ void pw_module_destroy(struct pw_module *module)
|
||||||
|
|
||||||
spa_list_remove(&module->link);
|
spa_list_remove(&module->link);
|
||||||
|
|
||||||
|
spa_list_consume(resource, &module->resource_list, link)
|
||||||
|
pw_resource_destroy(resource);
|
||||||
|
|
||||||
if (module->global) {
|
if (module->global) {
|
||||||
spa_hook_remove(&module->global_listener);
|
spa_hook_remove(&module->global_listener);
|
||||||
pw_global_destroy(module->global);
|
pw_global_destroy(module->global);
|
||||||
}
|
}
|
||||||
spa_list_consume(resource, &module->resource_list, link)
|
|
||||||
pw_resource_destroy(resource);
|
|
||||||
|
|
||||||
free((char *) module->info.name);
|
free((char *) module->info.name);
|
||||||
free((char *) module->info.filename);
|
free((char *) module->info.filename);
|
||||||
|
|
|
||||||
|
|
@ -649,12 +649,13 @@ void pw_node_destroy(struct pw_node *node)
|
||||||
spa_list_consume(port, &node->output_ports, link)
|
spa_list_consume(port, &node->output_ports, link)
|
||||||
pw_port_destroy(port);
|
pw_port_destroy(port);
|
||||||
|
|
||||||
|
spa_list_consume(resource, &node->resource_list, link)
|
||||||
|
pw_resource_destroy(resource);
|
||||||
|
|
||||||
if (node->global) {
|
if (node->global) {
|
||||||
spa_hook_remove(&node->global_listener);
|
spa_hook_remove(&node->global_listener);
|
||||||
pw_global_destroy(node->global);
|
pw_global_destroy(node->global);
|
||||||
}
|
}
|
||||||
spa_list_consume(resource, &node->resource_list, link)
|
|
||||||
pw_resource_destroy(resource);
|
|
||||||
|
|
||||||
pw_log_debug("node %p: free", node);
|
pw_log_debug("node %p: free", node);
|
||||||
pw_node_events_free(node);
|
pw_node_events_free(node);
|
||||||
|
|
|
||||||
|
|
@ -561,12 +561,13 @@ void pw_port_destroy(struct pw_port *port)
|
||||||
spa_list_consume(control, &port->control_list[1], port_link)
|
spa_list_consume(control, &port->control_list[1], port_link)
|
||||||
pw_control_destroy(control);
|
pw_control_destroy(control);
|
||||||
|
|
||||||
|
spa_list_consume(resource, &port->resource_list, link)
|
||||||
|
pw_resource_destroy(resource);
|
||||||
|
|
||||||
if (port->global) {
|
if (port->global) {
|
||||||
spa_hook_remove(&port->global_listener);
|
spa_hook_remove(&port->global_listener);
|
||||||
pw_global_destroy(port->global);
|
pw_global_destroy(port->global);
|
||||||
}
|
}
|
||||||
spa_list_consume(resource, &port->resource_list, link)
|
|
||||||
pw_resource_destroy(resource);
|
|
||||||
|
|
||||||
pw_log_debug("port %p: free", port);
|
pw_log_debug("port %p: free", port);
|
||||||
pw_port_events_free(port);
|
pw_port_events_free(port);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue