From d6289639f1b7954813bafc6279584cb17a6b08da Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Tue, 6 Aug 2019 12:19:24 +0200 Subject: [PATCH] media-session: keep track of peer When we don't link to a session but directly to a peer, remember this so that we don't try to link over and over again. --- src/examples/media-session.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/examples/media-session.c b/src/examples/media-session.c index 94c59bdcb..ce51f627b 100644 --- a/src/examples/media-session.c +++ b/src/examples/media-session.c @@ -115,6 +115,8 @@ struct node { struct spa_list session_link; struct session *session; + struct node *peer; + struct session *manager; struct spa_list port_list; @@ -739,10 +741,15 @@ registry_global_remove(void *data, uint32_t id) switch (obj->type) { case PW_TYPE_INTERFACE_Node: { - struct node *node = (struct node*) obj; + struct node *node = (struct node*) obj, *n; if (node->manager) remove_session(impl, node->manager); node->manager = NULL; + + spa_list_for_each(n, &impl->node_list, l) { + if (n->peer == node) + n->peer = NULL; + } break; } default: @@ -862,6 +869,8 @@ static int link_nodes(struct node *peer, enum pw_direction direction, struct nod pw_properties_free(props); } + node->peer = peer; + return 0; } @@ -899,7 +908,7 @@ static int rescan_node(struct impl *impl, struct node *node) if (node->type == NODE_TYPE_DEVICE) return 0; - if (node->session != NULL) + if (node->session != NULL || node->peer != NULL) return 0; if (node->info == NULL || node->info->props == NULL) {