destroy proxies when global is removed

When a global is removed, also remove the proxies. We can have multiple
proxies to a global otherwise when a client has a sequence of events
queued from the server like this:

Global 1 added
Global 1 removed
Global 1 added

The proxy we added in the firt event would not be destroyed because the
server did not know about it when global 1 was removed and then a
second one would be made.
This commit is contained in:
Wim Taymans 2021-11-08 12:52:22 +01:00
parent 2329a4d323
commit 5ed4977b38
3 changed files with 31 additions and 8 deletions

View file

@ -1165,15 +1165,19 @@ static void registry_event_global_remove(void *data, uint32_t id)
struct global *g;
const char *name;
if ((g = find_global(ctl, id, NULL, PW_TYPE_INTERFACE_Node)) == NULL)
return;
if ((name = pw_properties_get(g->props, PW_KEY_NODE_NAME)) == NULL)
if ((g = find_global(ctl, id, NULL, NULL)) == NULL)
return;
if (spa_streq(name, ctl->default_sink))
ctl->default_sink[0] = '\0';
if (spa_streq(name, ctl->default_source))
ctl->default_source[0] = '\0';
if (spa_streq(g->ginfo->type, PW_TYPE_INTERFACE_Node)) {
if ((name = pw_properties_get(g->props, PW_KEY_NODE_NAME)) == NULL)
return;
if (spa_streq(name, ctl->default_sink))
ctl->default_sink[0] = '\0';
if (spa_streq(name, ctl->default_source))
ctl->default_source[0] = '\0';
}
pw_proxy_destroy(g->proxy);
}
static const struct pw_registry_events registry_events = {