diff options
Diffstat (limited to 'pipewire-pulseaudio/src/context.c')
-rw-r--r-- | pipewire-pulseaudio/src/context.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/pipewire-pulseaudio/src/context.c b/pipewire-pulseaudio/src/context.c index be2e8aee..c72fba78 100644 --- a/pipewire-pulseaudio/src/context.c +++ b/pipewire-pulseaudio/src/context.c @@ -1432,23 +1432,34 @@ static void core_done(void *data, uint32_t id, int seq) pa_context *c = data; pa_operation *o, *t; struct global *g; + struct spa_list ops; pw_log_debug("done id:%u seq:%d/%d", id, seq, c->pending_seq); if (c->pending_seq != seq) return; + spa_list_init(&ops); + spa_list_consume(o, &c->operations, link) { + spa_list_remove(&o->link); + spa_list_append(&ops, &o->link); + } spa_list_for_each(g, &c->globals, link) { if (g->sync) { do_global_sync(g); g->sync = false; } } - spa_list_for_each_safe(o, t, &c->operations, link) { + spa_list_for_each_safe(o, t, &ops, link) { pa_operation_ref(o); + pw_log_debug("operation %p complete", o); if (o->callback) o->callback(o, o->userdata); pa_operation_unref(o); } + spa_list_consume(o, &ops, link) { + pw_log_warn("operation %p canceled", o); + pa_operation_cancel(o); + } } static const struct pw_core_events core_events = { |