mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-04 13:30:12 -05:00
clean the hook lists
Make sure the hook lists are emptied so that the removed callbacks are called. The callers should really remove the hook they installed themselves but this is a last chance to fix things up.
This commit is contained in:
parent
1570e62635
commit
a2549fc638
21 changed files with 47 additions and 0 deletions
|
|
@ -292,6 +292,8 @@ void pw_protocol_native_connection_destroy(struct pw_protocol_native_connection
|
|||
|
||||
spa_hook_list_call(&conn->listener_list, struct pw_protocol_native_connection_events, destroy, 0);
|
||||
|
||||
spa_hook_list_clean(&conn->listener_list);
|
||||
|
||||
clear_buffer(&impl->out, true);
|
||||
clear_buffer(&impl->in, true);
|
||||
free(impl->out.buffer_data);
|
||||
|
|
|
|||
|
|
@ -405,6 +405,9 @@ void pw_context_destroy(struct pw_context *context)
|
|||
|
||||
pw_map_clear(&context->globals);
|
||||
|
||||
spa_hook_list_clean(&context->listener_list);
|
||||
spa_hook_list_clean(&context->driver_listener_list);
|
||||
|
||||
free(context);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -119,6 +119,8 @@ void pw_control_destroy(struct pw_control *control)
|
|||
pw_log_debug(NAME" %p: free", control);
|
||||
pw_control_emit_free(control);
|
||||
|
||||
spa_hook_list_clean(&control->listener_list);
|
||||
|
||||
if (control->direction == SPA_DIRECTION_OUTPUT) {
|
||||
if (impl->mem)
|
||||
pw_memblock_unref(impl->mem);
|
||||
|
|
|
|||
|
|
@ -173,6 +173,9 @@ void pw_data_loop_destroy(struct pw_data_loop *loop)
|
|||
pw_loop_destroy_source(loop->loop, loop->event);
|
||||
if (loop->created)
|
||||
pw_loop_destroy(loop->loop);
|
||||
|
||||
spa_hook_list_clean(&loop->listener_list);
|
||||
|
||||
free(loop);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1122,6 +1122,9 @@ void pw_filter_destroy(struct pw_filter *filter)
|
|||
|
||||
pw_properties_free(filter->properties);
|
||||
|
||||
spa_hook_list_clean(&impl->hooks);
|
||||
spa_hook_list_clean(&filter->listener_list);
|
||||
|
||||
free(filter->name);
|
||||
|
||||
if (impl->data.context)
|
||||
|
|
|
|||
|
|
@ -389,6 +389,8 @@ void pw_global_destroy(struct pw_global *global)
|
|||
pw_log_debug(NAME" %p: free", global);
|
||||
pw_global_emit_free(global);
|
||||
|
||||
spa_hook_list_clean(&global->listener_list);
|
||||
|
||||
pw_properties_free(global->properties);
|
||||
|
||||
free(global);
|
||||
|
|
|
|||
|
|
@ -576,6 +576,8 @@ void pw_impl_client_destroy(struct pw_impl_client *client)
|
|||
pw_log_debug(NAME" %p: free", impl);
|
||||
pw_impl_client_emit_free(client);
|
||||
|
||||
spa_hook_list_clean(&client->listener_list);
|
||||
|
||||
pw_map_clear(&client->objects);
|
||||
pw_array_clear(&impl->permissions);
|
||||
|
||||
|
|
|
|||
|
|
@ -444,6 +444,8 @@ void pw_impl_core_destroy(struct pw_impl_core *core)
|
|||
pw_impl_core_emit_free(core);
|
||||
pw_log_debug(NAME" %p: free", core);
|
||||
|
||||
spa_hook_list_clean(&core->listener_list);
|
||||
|
||||
pw_properties_free(core->properties);
|
||||
|
||||
free(core);
|
||||
|
|
|
|||
|
|
@ -200,6 +200,8 @@ void pw_impl_device_destroy(struct pw_impl_device *device)
|
|||
pw_log_debug(NAME" %p: free", device);
|
||||
pw_impl_device_emit_free(device);
|
||||
|
||||
spa_hook_list_clean(&device->listener_list);
|
||||
|
||||
pw_properties_free(device->properties);
|
||||
free(device->name);
|
||||
|
||||
|
|
|
|||
|
|
@ -94,6 +94,9 @@ void pw_impl_factory_destroy(struct pw_impl_factory *factory)
|
|||
|
||||
pw_impl_factory_emit_free(factory);
|
||||
pw_log_debug(NAME" %p: free", factory);
|
||||
|
||||
spa_hook_list_clean(&factory->listener_list);
|
||||
|
||||
free((char *)factory->info.name);
|
||||
|
||||
pw_properties_free(factory->properties);
|
||||
|
|
|
|||
|
|
@ -1284,6 +1284,8 @@ void pw_impl_link_destroy(struct pw_impl_link *link)
|
|||
pw_log_debug(NAME" %p: free", impl);
|
||||
pw_impl_link_emit_free(link);
|
||||
|
||||
spa_hook_list_clean(&link->listener_list);
|
||||
|
||||
pw_work_queue_destroy(impl->work);
|
||||
|
||||
pw_properties_free(link->properties);
|
||||
|
|
|
|||
|
|
@ -322,6 +322,8 @@ void pw_impl_module_destroy(struct pw_impl_module *module)
|
|||
|
||||
pw_properties_free(module->properties);
|
||||
|
||||
spa_hook_list_clean(&module->listener_list);
|
||||
|
||||
if (!pw_in_valgrind() && dlclose(impl->hnd) != 0)
|
||||
pw_log_warn(NAME" %p: dlclose failed: %s", module, dlerror());
|
||||
free(impl);
|
||||
|
|
|
|||
|
|
@ -1680,6 +1680,8 @@ void pw_impl_node_destroy(struct pw_impl_node *node)
|
|||
pw_log_debug(NAME" %p: free", node);
|
||||
pw_impl_node_emit_free(node);
|
||||
|
||||
spa_hook_list_clean(&node->listener_list);
|
||||
|
||||
pw_memblock_unref(node->activation);
|
||||
|
||||
pw_work_queue_destroy(impl->work);
|
||||
|
|
|
|||
|
|
@ -1018,6 +1018,8 @@ void pw_impl_port_destroy(struct pw_impl_port *port)
|
|||
pw_log_debug(NAME" %p: free", port);
|
||||
pw_impl_port_emit_free(port);
|
||||
|
||||
spa_hook_list_clean(&port->listener_list);
|
||||
|
||||
pw_buffers_clear(&port->buffers);
|
||||
pw_buffers_clear(&port->mix_buffers);
|
||||
free((void*)port->error);
|
||||
|
|
|
|||
|
|
@ -103,6 +103,8 @@ void pw_main_loop_destroy(struct pw_main_loop *loop)
|
|||
if (loop->created)
|
||||
pw_loop_destroy(loop->loop);
|
||||
|
||||
spa_hook_list_clean(&loop->listener_list);
|
||||
|
||||
free(loop);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -181,6 +181,8 @@ void pw_mempool_destroy(struct pw_mempool *pool)
|
|||
|
||||
spa_list_remove(&impl->link);
|
||||
|
||||
spa_hook_list_clean(&impl->listener_list);
|
||||
|
||||
pw_map_clear(&impl->map);
|
||||
if (pool->props)
|
||||
pw_properties_free(pool->props);
|
||||
|
|
|
|||
|
|
@ -109,6 +109,8 @@ void pw_protocol_destroy(struct pw_protocol *protocol)
|
|||
pw_log_debug(NAME" %p: destroy", protocol);
|
||||
pw_protocol_emit_destroy(protocol);
|
||||
|
||||
spa_hook_list_clean(&protocol->listener_list);
|
||||
|
||||
spa_list_remove(&protocol->link);
|
||||
|
||||
spa_list_consume(server, &protocol->server_list, link)
|
||||
|
|
|
|||
|
|
@ -281,6 +281,9 @@ void pw_resource_destroy(struct pw_resource *resource)
|
|||
|
||||
pw_log_debug(NAME" %p: free %u", resource, resource->id);
|
||||
|
||||
spa_hook_list_clean(&resource->listener_list);
|
||||
spa_hook_list_clean(&resource->object_listener_list);
|
||||
|
||||
free(resource);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1305,6 +1305,9 @@ void pw_stream_destroy(struct pw_stream *stream)
|
|||
free(c);
|
||||
}
|
||||
|
||||
spa_hook_list_clean(&impl->hooks);
|
||||
spa_hook_list_clean(&stream->listener_list);
|
||||
|
||||
spa_hook_remove(&impl->context_listener);
|
||||
|
||||
if (impl->data.context)
|
||||
|
|
|
|||
|
|
@ -198,6 +198,8 @@ void pw_thread_loop_destroy(struct pw_thread_loop *loop)
|
|||
|
||||
spa_hook_remove(&loop->hook);
|
||||
|
||||
spa_hook_list_clean(&loop->listener_list);
|
||||
|
||||
pw_loop_destroy_source(loop->loop, loop->event);
|
||||
|
||||
if (loop->created)
|
||||
|
|
|
|||
|
|
@ -239,6 +239,7 @@ endpoint_init(struct endpoint * self)
|
|||
static void
|
||||
endpoint_clear(struct endpoint * self)
|
||||
{
|
||||
spa_hook_list_clean(&self->hooks);
|
||||
pw_properties_free(self->properties);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue