From a96d8aa1aa3871aaf837bc4c7b475823e3e31679 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Wed, 17 Mar 2021 16:19:16 +0100 Subject: [PATCH] media-session: guard against node destroy while iterating When we are iterating the nodes and one is destroyed, restart the scan operation so that we avoid accessing invalid memory. See #901 --- src/examples/media-session/policy-node.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/examples/media-session/policy-node.c b/src/examples/media-session/policy-node.c index c81b93596..b6124ae51 100644 --- a/src/examples/media-session/policy-node.c +++ b/src/examples/media-session/policy-node.c @@ -78,6 +78,7 @@ struct impl { uint32_t sample_rate; struct spa_list node_list; + unsigned int node_list_changed:1; int seq; struct default_node defaults[4]; @@ -893,8 +894,13 @@ static void session_rescan(void *data, int seq) pw_log_debug(NAME" %p: rescan", impl); - spa_list_for_each(node, &impl->node_list, link) +again: + impl->node_list_changed = false; + spa_list_for_each(node, &impl->node_list, link) { rescan_node(impl, node); + if (impl->node_list_changed) + goto again; + } refresh_auto_default_nodes(impl); }