mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-03 09:01:54 -05:00
use _list_consume to destroy objects
This commit is contained in:
parent
ec1d7b8df7
commit
39240fb9c0
10 changed files with 40 additions and 37 deletions
|
|
@ -78,6 +78,11 @@ static inline void spa_list_remove(struct spa_list *elem)
|
|||
#define spa_list_next(pos, member) \
|
||||
SPA_CONTAINER_OF((pos)->member.next, __typeof__(*pos), member)
|
||||
|
||||
#define spa_list_consume(pos, head, member) \
|
||||
for (pos = spa_list_first(head, __typeof__(*pos), member); \
|
||||
!spa_list_is_empty(head); \
|
||||
pos = spa_list_first(head, __typeof__(*pos), member))
|
||||
|
||||
#define spa_list_for_each_next(pos, head, curr, member) \
|
||||
for (pos = spa_list_first(curr, __typeof__(*pos), member); \
|
||||
!spa_list_is_end(pos, head, member); \
|
||||
|
|
|
|||
|
|
@ -680,13 +680,13 @@ static int impl_get_interface(struct spa_handle *handle, uint32_t type, void **i
|
|||
static int impl_clear(struct spa_handle *handle)
|
||||
{
|
||||
struct impl *impl;
|
||||
struct source_impl *source, *tmp;
|
||||
struct source_impl *source;
|
||||
|
||||
spa_return_val_if_fail(handle != NULL, -EINVAL);
|
||||
|
||||
impl = (struct impl *) handle;
|
||||
|
||||
spa_list_for_each_safe(source, tmp, &impl->source_list, link)
|
||||
spa_list_consume(source, &impl->source_list, link)
|
||||
loop_destroy_source(&source->source);
|
||||
|
||||
process_destroy(impl);
|
||||
|
|
|
|||
|
|
@ -295,7 +295,7 @@ static int destroy_resource(void *object, void *data)
|
|||
*/
|
||||
void pw_client_destroy(struct pw_client *client)
|
||||
{
|
||||
struct pw_resource *resource, *tmp;
|
||||
struct pw_resource *resource;
|
||||
struct impl *impl = SPA_CONTAINER_OF(client, struct impl, this);
|
||||
|
||||
pw_log_debug("client %p: destroy", client);
|
||||
|
|
@ -311,7 +311,7 @@ void pw_client_destroy(struct pw_client *client)
|
|||
pw_global_destroy(client->global);
|
||||
}
|
||||
|
||||
spa_list_for_each_safe(resource, tmp, &client->resource_list, link)
|
||||
spa_list_consume(resource, &client->resource_list, link)
|
||||
pw_resource_destroy(resource);
|
||||
|
||||
pw_map_for_each(&client->objects, destroy_resource, client);
|
||||
|
|
|
|||
|
|
@ -490,26 +490,26 @@ struct pw_core *pw_core_new(struct pw_loop *main_loop, struct pw_properties *pro
|
|||
void pw_core_destroy(struct pw_core *core)
|
||||
{
|
||||
struct impl *impl = SPA_CONTAINER_OF(core, struct impl, this);
|
||||
struct pw_global *global, *t;
|
||||
struct pw_module *module, *tm;
|
||||
struct pw_remote *remote, *tr;
|
||||
struct pw_node *node, *tn;
|
||||
struct pw_global *global;
|
||||
struct pw_module *module;
|
||||
struct pw_remote *remote;
|
||||
struct pw_node *node;
|
||||
|
||||
pw_log_debug("core %p: destroy", core);
|
||||
pw_core_events_destroy(core);
|
||||
|
||||
spa_hook_remove(&core->global_listener);
|
||||
|
||||
spa_list_for_each_safe(remote, tr, &core->remote_list, link)
|
||||
spa_list_consume(remote, &core->remote_list, link)
|
||||
pw_remote_destroy(remote);
|
||||
|
||||
spa_list_for_each_safe(module, tm, &core->module_list, link)
|
||||
spa_list_consume(module, &core->module_list, link)
|
||||
pw_module_destroy(module);
|
||||
|
||||
spa_list_for_each_safe(node, tn, &core->node_list, link)
|
||||
spa_list_consume(node, &core->node_list, link)
|
||||
pw_node_destroy(node);
|
||||
|
||||
spa_list_for_each_safe(global, t, &core->global_list, link)
|
||||
spa_list_consume(global, &core->global_list, link)
|
||||
pw_global_destroy(global);
|
||||
|
||||
pw_core_events_free(core);
|
||||
|
|
|
|||
|
|
@ -1361,7 +1361,7 @@ int pw_link_register(struct pw_link *link,
|
|||
void pw_link_destroy(struct pw_link *link)
|
||||
{
|
||||
struct impl *impl = SPA_CONTAINER_OF(link, struct impl, this);
|
||||
struct pw_resource *resource, *tmp;
|
||||
struct pw_resource *resource;
|
||||
|
||||
pw_log_debug("link %p: destroy", impl);
|
||||
pw_link_events_destroy(link);
|
||||
|
|
@ -1379,8 +1379,8 @@ void pw_link_destroy(struct pw_link *link)
|
|||
pw_global_destroy(link->global);
|
||||
}
|
||||
|
||||
spa_list_for_each_safe(resource, tmp, &link->resource_list, link)
|
||||
pw_resource_destroy(resource);
|
||||
spa_list_consume(resource, &link->resource_list, link)
|
||||
pw_resource_destroy(resource);
|
||||
|
||||
pw_log_debug("link %p: free", impl);
|
||||
pw_link_events_free(link);
|
||||
|
|
|
|||
|
|
@ -289,7 +289,7 @@ pw_module_load(struct pw_core *core,
|
|||
void pw_module_destroy(struct pw_module *module)
|
||||
{
|
||||
struct impl *impl = SPA_CONTAINER_OF(module, struct impl, this);
|
||||
struct pw_resource *resource, *tmp;
|
||||
struct pw_resource *resource;
|
||||
|
||||
pw_log_debug("module %p: destroy", module);
|
||||
pw_module_events_destroy(module);
|
||||
|
|
@ -300,7 +300,7 @@ void pw_module_destroy(struct pw_module *module)
|
|||
spa_hook_remove(&module->global_listener);
|
||||
pw_global_destroy(module->global);
|
||||
}
|
||||
spa_list_for_each_safe(resource, tmp, &module->resource_list, link)
|
||||
spa_list_consume(resource, &module->resource_list, link)
|
||||
pw_resource_destroy(resource);
|
||||
|
||||
if (module->info.name)
|
||||
|
|
|
|||
|
|
@ -771,9 +771,9 @@ do_node_remove(struct spa_loop *loop,
|
|||
void pw_node_destroy(struct pw_node *node)
|
||||
{
|
||||
struct impl *impl = SPA_CONTAINER_OF(node, struct impl, this);
|
||||
struct pw_resource *resource, *tmp;
|
||||
struct pw_resource *resource;
|
||||
struct pw_node *n, *t;
|
||||
struct pw_port *port, *tmpp;
|
||||
struct pw_port *port;
|
||||
|
||||
pw_log_debug("node %p: destroy", impl);
|
||||
pw_node_events_destroy(node);
|
||||
|
|
@ -803,18 +803,16 @@ void pw_node_destroy(struct pw_node *node)
|
|||
pw_port_unlink(port);
|
||||
|
||||
pw_log_debug("node %p: destroy ports", node);
|
||||
spa_list_for_each_safe(port, tmpp, &node->input_ports, link) {
|
||||
spa_list_consume(port, &node->input_ports, link)
|
||||
pw_port_destroy(port);
|
||||
}
|
||||
spa_list_for_each_safe(port, tmpp, &node->output_ports, link) {
|
||||
spa_list_consume(port, &node->output_ports, link)
|
||||
pw_port_destroy(port);
|
||||
}
|
||||
|
||||
if (node->global) {
|
||||
spa_hook_remove(&node->global_listener);
|
||||
pw_global_destroy(node->global);
|
||||
}
|
||||
spa_list_for_each_safe(resource, tmp, &node->resource_list, link)
|
||||
spa_list_consume(resource, &node->resource_list, link)
|
||||
pw_resource_destroy(resource);
|
||||
|
||||
pw_log_debug("node %p: free", node);
|
||||
|
|
|
|||
|
|
@ -627,17 +627,17 @@ static void pw_port_remove(struct pw_port *port)
|
|||
|
||||
void pw_port_destroy(struct pw_port *port)
|
||||
{
|
||||
struct pw_control *control, *ctemp;
|
||||
struct pw_resource *resource, *tmp;
|
||||
struct pw_control *control;
|
||||
struct pw_resource *resource;
|
||||
|
||||
pw_log_debug("port %p: destroy", port);
|
||||
|
||||
pw_port_events_destroy(port);
|
||||
|
||||
pw_log_debug("port %p: control destroy", port);
|
||||
spa_list_for_each_safe(control, ctemp, &port->control_list[0], port_link)
|
||||
spa_list_consume(control, &port->control_list[0], port_link)
|
||||
pw_control_destroy(control);
|
||||
spa_list_for_each_safe(control, ctemp, &port->control_list[1], port_link)
|
||||
spa_list_consume(control, &port->control_list[1], port_link)
|
||||
pw_control_destroy(control);
|
||||
|
||||
pw_port_remove(port);
|
||||
|
|
@ -646,7 +646,7 @@ void pw_port_destroy(struct pw_port *port)
|
|||
spa_hook_remove(&port->global_listener);
|
||||
pw_global_destroy(port->global);
|
||||
}
|
||||
spa_list_for_each_safe(resource, tmp, &port->resource_list, link)
|
||||
spa_list_consume(resource, &port->resource_list, link)
|
||||
pw_resource_destroy(resource);
|
||||
|
||||
pw_log_debug("port %p: free", port);
|
||||
|
|
|
|||
|
|
@ -84,18 +84,18 @@ void pw_protocol_destroy(struct pw_protocol *protocol)
|
|||
{
|
||||
struct impl *impl = SPA_CONTAINER_OF(protocol, struct impl, this);
|
||||
struct marshal *marshal, *t1;
|
||||
struct pw_protocol_server *server, *t2;
|
||||
struct pw_protocol_client *client, *t3;
|
||||
struct pw_protocol_server *server;
|
||||
struct pw_protocol_client *client;
|
||||
|
||||
pw_log_debug("protocol %p: destroy", protocol);
|
||||
pw_protocol_events_destroy(protocol);
|
||||
|
||||
spa_list_remove(&protocol->link);
|
||||
|
||||
spa_list_for_each_safe(server, t2, &protocol->server_list, link)
|
||||
spa_list_consume(server, &protocol->server_list, link)
|
||||
pw_protocol_server_destroy(server);
|
||||
|
||||
spa_list_for_each_safe(client, t3, &protocol->client_list, link)
|
||||
spa_list_consume(client, &protocol->client_list, link)
|
||||
pw_protocol_client_destroy(client);
|
||||
|
||||
spa_list_for_each_safe(marshal, t1, &protocol->marshal_list, link)
|
||||
|
|
|
|||
|
|
@ -294,7 +294,7 @@ struct pw_remote *pw_remote_new(struct pw_core *core,
|
|||
void pw_remote_destroy(struct pw_remote *remote)
|
||||
{
|
||||
struct remote *impl = SPA_CONTAINER_OF(remote, struct remote, this);
|
||||
struct pw_stream *stream, *s2;
|
||||
struct pw_stream *stream;
|
||||
|
||||
pw_log_debug("remote %p: destroy", remote);
|
||||
pw_remote_events_destroy(remote);
|
||||
|
|
@ -302,7 +302,7 @@ void pw_remote_destroy(struct pw_remote *remote)
|
|||
if (remote->state != PW_REMOTE_STATE_UNCONNECTED)
|
||||
pw_remote_disconnect(remote);
|
||||
|
||||
spa_list_for_each_safe(stream, s2, &remote->stream_list, link)
|
||||
spa_list_consume(stream, &remote->stream_list, link)
|
||||
pw_stream_destroy(stream);
|
||||
|
||||
pw_protocol_client_destroy (remote->conn);
|
||||
|
|
@ -454,7 +454,7 @@ int pw_remote_steal_fd(struct pw_remote *remote)
|
|||
|
||||
int pw_remote_disconnect(struct pw_remote *remote)
|
||||
{
|
||||
struct pw_proxy *proxy, *t2;
|
||||
struct pw_proxy *proxy;
|
||||
struct pw_stream *stream, *s2;
|
||||
|
||||
pw_log_debug("remote %p: disconnect", remote);
|
||||
|
|
@ -463,7 +463,7 @@ int pw_remote_disconnect(struct pw_remote *remote)
|
|||
|
||||
pw_protocol_client_disconnect (remote->conn);
|
||||
|
||||
spa_list_for_each_safe(proxy, t2, &remote->proxy_list, link)
|
||||
spa_list_consume(proxy, &remote->proxy_list, link)
|
||||
pw_proxy_destroy(proxy);
|
||||
remote->core_proxy = NULL;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue