context: handle transport updates better

The transport update is set in the node properties. If one client tries
to start and another tries to stop we have two conflicting desired states
in the nodes.

Fix this by making the state update a one time property and remove it
from the sever and client properties after updating it. We then need to
keep the new state around and apply it once.

Keep the node driver state as it is unless there was a transport state
update.

Fixes #4543
This commit is contained in:
Wim Taymans 2025-02-11 12:01:20 +01:00
parent 98b6469b88
commit d5f0c8a550
4 changed files with 33 additions and 18 deletions

View file

@ -7297,6 +7297,8 @@ static int transport_update(struct client* c, int active)
PW_CLIENT_NODE_UPDATE_INFO,
0, NULL, &c->info);
c->info.change_mask = 0;
pw_properties_set(c->props, PW_KEY_NODE_TRANSPORT, NULL);
pw_thread_loop_unlock(c->context.loop);
return 0;