From dae64bd2b5aab3a3ed36c76e5ace433606caeb83 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Fri, 20 Nov 2020 14:54:37 +0100 Subject: [PATCH] policy-node: keep track how many times we link a node Nodes that are marked as DONT_RECONNECT are only linked once. Fixes a problem where a clients makes a DONT_RECONNECT stream but without a specific sink. See #395 --- src/examples/media-session/policy-node.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/examples/media-session/policy-node.c b/src/examples/media-session/policy-node.c index f07dc0398..72fd8a3a1 100644 --- a/src/examples/media-session/policy-node.c +++ b/src/examples/media-session/policy-node.c @@ -90,6 +90,7 @@ struct node { struct spa_audio_info format; + int connect_count; uint64_t plugged; unsigned int active:1; unsigned int exclusive:1; @@ -510,9 +511,10 @@ static int link_nodes(struct node *node, struct node *peer) pw_properties_setf(props, PW_KEY_LINK_INPUT_NODE, "%d", input->id); pw_log_info("linking node %d to node %d", output->id, input->id); - if (sm_media_session_create_links(impl->session, &props->dict) > 0) + if (sm_media_session_create_links(impl->session, &props->dict) > 0) { node->peer = peer; - + node->connect_count++; + } pw_properties_free(props); return 0; @@ -652,7 +654,7 @@ static int rescan_node(struct impl *impl, struct node *n) pw_log_warn("node %d target:%d not found, find fallback:%d", n->id, path_id, reconnect); } - if (path_id == SPA_ID_INVALID && reconnect) { + if (path_id == SPA_ID_INVALID && (reconnect || n->connect_count == 0)) { spa_list_for_each(peer, &impl->node_list, link) find_node(&find, peer); }