mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-10-31 22:25:38 -04:00
pulse: set mask after completing the operation
This ensures we first finish all pending operations and then get notifications of the new events. Brings pactl subscribe in line with what it does on real PulseAudio.
This commit is contained in:
parent
19c9a55050
commit
ac4d4582a4
1 changed files with 20 additions and 6 deletions
|
|
@ -1543,7 +1543,7 @@ static void on_success(pa_operation *o, void *userdata)
|
|||
{
|
||||
struct success_data *d = userdata;
|
||||
pa_context *c = o->context;
|
||||
pw_log_debug("context %p: error %d", c, d->error);
|
||||
pw_log_debug("context %p: operation:%p error %d", c, o, d->error);
|
||||
if (d->error != 0)
|
||||
pa_context_set_error(c, d->error);
|
||||
if (d->cb)
|
||||
|
|
@ -1551,23 +1551,37 @@ static void on_success(pa_operation *o, void *userdata)
|
|||
pa_operation_done(o);
|
||||
}
|
||||
|
||||
struct subscribe_data {
|
||||
struct success_data success;
|
||||
pa_subscription_mask_t mask;
|
||||
};
|
||||
|
||||
static void on_subscribe(pa_operation *o, void *userdata)
|
||||
{
|
||||
struct subscribe_data *d = userdata;
|
||||
pa_context *c = o->context;
|
||||
c->subscribe_mask = d->mask;
|
||||
on_success(o, &d->success);
|
||||
}
|
||||
|
||||
SPA_EXPORT
|
||||
pa_operation* pa_context_subscribe(pa_context *c, pa_subscription_mask_t m, pa_context_success_cb_t cb, void *userdata)
|
||||
{
|
||||
pa_operation *o;
|
||||
struct success_data *d;
|
||||
struct subscribe_data *d;
|
||||
|
||||
pa_assert(c);
|
||||
pa_assert(c->refcount >= 1);
|
||||
|
||||
PA_CHECK_VALIDITY_RETURN_NULL(c, c->state == PA_CONTEXT_READY, PA_ERR_BADSTATE);
|
||||
|
||||
c->subscribe_mask = m;
|
||||
pw_log_debug("context %p: subscribe %08x", c, m);
|
||||
|
||||
o = pa_operation_new(c, NULL, on_success, sizeof(struct success_data));
|
||||
o = pa_operation_new(c, NULL, on_subscribe, sizeof(struct subscribe_data));
|
||||
d = o->userdata;
|
||||
d->cb = cb;
|
||||
d->userdata = userdata;
|
||||
d->success.cb = cb;
|
||||
d->success.userdata = userdata;
|
||||
d->mask = m;
|
||||
pa_operation_sync(o);
|
||||
|
||||
return o;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue