From aeed0e3ea4ddda0ab49be5406b51d6c8e4115af5 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Tue, 3 Nov 2020 18:02:43 +0100 Subject: [PATCH] impl-node: fix cancel of previous state Force a state change completed when canceled so that we can perform the new state change. Fixes some hangs with fast pause/play. --- src/pipewire/impl-node.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/pipewire/impl-node.c b/src/pipewire/impl-node.c index 85b2b055a..dd49d5c2f 100644 --- a/src/pipewire/impl-node.c +++ b/src/pipewire/impl-node.c @@ -1960,9 +1960,11 @@ int pw_impl_node_set_state(struct pw_impl_node *node, enum pw_node_state state) } if (old != state) { - impl->pending = state; - if (impl->pending_id != SPA_ID_INVALID) + if (impl->pending_id != SPA_ID_INVALID) { pw_work_queue_cancel(impl->work, node, impl->pending_id); + node->info.state = impl->pending; + } + impl->pending = state; impl->pending_id = pw_work_queue_add(impl->work, node, res, on_state_complete, SPA_INT_TO_PTR(state)); }