From 39240fb9c019b2f1f1bd9e918e61bb284eb78663 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Tue, 25 Sep 2018 13:05:13 +0200 Subject: [PATCH] use _list_consume to destroy objects --- spa/include/spa/utils/list.h | 5 +++++ spa/plugins/support/loop.c | 4 ++-- src/pipewire/client.c | 4 ++-- src/pipewire/core.c | 16 ++++++++-------- src/pipewire/link.c | 6 +++--- src/pipewire/module.c | 4 ++-- src/pipewire/node.c | 12 +++++------- src/pipewire/port.c | 10 +++++----- src/pipewire/protocol.c | 8 ++++---- src/pipewire/remote.c | 8 ++++---- 10 files changed, 40 insertions(+), 37 deletions(-) diff --git a/spa/include/spa/utils/list.h b/spa/include/spa/utils/list.h index 18a06a523..523fbae94 100644 --- a/spa/include/spa/utils/list.h +++ b/spa/include/spa/utils/list.h @@ -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); \ diff --git a/spa/plugins/support/loop.c b/spa/plugins/support/loop.c index 0b1f9bade..7c474f96e 100644 --- a/spa/plugins/support/loop.c +++ b/spa/plugins/support/loop.c @@ -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); diff --git a/src/pipewire/client.c b/src/pipewire/client.c index dabaf684b..45c82d1c5 100644 --- a/src/pipewire/client.c +++ b/src/pipewire/client.c @@ -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); diff --git a/src/pipewire/core.c b/src/pipewire/core.c index 68b1bd321..4fc398c0a 100644 --- a/src/pipewire/core.c +++ b/src/pipewire/core.c @@ -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); diff --git a/src/pipewire/link.c b/src/pipewire/link.c index 9792dbe44..72d3de78d 100644 --- a/src/pipewire/link.c +++ b/src/pipewire/link.c @@ -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); diff --git a/src/pipewire/module.c b/src/pipewire/module.c index a4a0dba25..ef7e846bc 100644 --- a/src/pipewire/module.c +++ b/src/pipewire/module.c @@ -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) diff --git a/src/pipewire/node.c b/src/pipewire/node.c index 5e4d4711c..e02432648 100644 --- a/src/pipewire/node.c +++ b/src/pipewire/node.c @@ -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); diff --git a/src/pipewire/port.c b/src/pipewire/port.c index 9fe5ab7a2..1ac306254 100644 --- a/src/pipewire/port.c +++ b/src/pipewire/port.c @@ -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); diff --git a/src/pipewire/protocol.c b/src/pipewire/protocol.c index 0ce745c57..5a73a07a4 100644 --- a/src/pipewire/protocol.c +++ b/src/pipewire/protocol.c @@ -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) diff --git a/src/pipewire/remote.c b/src/pipewire/remote.c index fc07e1afb..20bfdd761 100644 --- a/src/pipewire/remote.c +++ b/src/pipewire/remote.c @@ -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;