From dd36352a5c32e6b3ebc9e25ee2046976ab9ecde1 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Tue, 2 May 2023 13:41:00 +0200 Subject: [PATCH] stream: move from dequeued to queued for capture stream flush When flushing a capture stream we move all dequeued buffers to the queued queue for recycling. The dequeued queue is filled again when captured buffers become available. Otherwise we might never recycle some dequeued buffers. --- src/pipewire/stream.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/pipewire/stream.c b/src/pipewire/stream.c index 46c09fb16..065e52c73 100644 --- a/src/pipewire/stream.c +++ b/src/pipewire/stream.c @@ -2374,12 +2374,21 @@ do_flush(struct spa_loop *loop, { struct stream *impl = user_data; struct buffer *b; + struct queue *from, *to; pw_log_trace_fp("%p: flush", impl); + + if (impl->direction == SPA_DIRECTION_OUTPUT) { + from = &impl->queued; + to = &impl->dequeued; + } else { + from = &impl->dequeued; + to = &impl->queued; + } do { - b = queue_pop(impl, &impl->queued); + b = queue_pop(impl, from); if (b != NULL) - queue_push(impl, &impl->dequeued, b); + queue_push(impl, to, b); } while (b);