pulse-server: pending-sample: handle client disconnection correctly

Previously, a client disconnecting while a sample was playing could
lead to issues. For example, if a client disconnected before the
"ready" signal of the sample-play arrives, `operation_new_cb()`
would be called and that would try to use the client's pw_manager,
however, that has previously been destroyed in `client_disconnect()`.

If the client disconnected after the "ready" signal but before the reply
has been sent, then `sample_play_ready_reply()` would never be called
since operations are completed via the client's pw_manager which
would already be destroyed at that point.

Fix this by installing a listener on the client, and properly
cancelling the operation and making sure that the pending_sample
is correctly destroyed.
This commit is contained in:
Barnabás Pőcze 2023-05-07 16:19:06 +02:00 committed by Wim Taymans
parent bd510bf602
commit 2ba9881b4d
2 changed files with 18 additions and 0 deletions

View file

@ -20,6 +20,7 @@ struct pending_sample {
struct client *client;
struct sample_play *play;
struct spa_hook listener;
struct spa_hook client_listener;
uint32_t tag;
unsigned replied:1;
unsigned done:1;