Commit c73f1ca86b for qemu.org

commit c73f1ca86b8e32c22cdfcadda1b99df65b5fac45
Author: Marc-André Lureau <marcandre.lureau@redhat.com>
Date:   Sun Oct 4 14:23:20 2026 +0400

    audio/pwaudio: fix capture buffer leak on early return paths

    capture_on_process() leaks the PipeWire buffer on the p == NULL and
    underrun early-return paths by not calling pw_stream_queue_buffer().
    The stream eventually starves from its buffer pool.

    Reported-by: Hui Peng <benquike@gmail.com>
    Fixes: c2d3d1c29415 ("audio/pwaudio.c: Add Pipewire audio backend for QEMU")
    Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
    Message-ID: <20261004-issue-4560-v1-6-ccbef537cbeb@redhat.com>

diff --git a/audio/pwaudio.c b/audio/pwaudio.c
index a59c22e60b..af360e2ec5 100644
--- a/audio/pwaudio.c
+++ b/audio/pwaudio.c
@@ -171,6 +171,7 @@ capture_on_process(void *data)
     buf = b->buffer;
     p = buf->datas[0].data;
     if (p == NULL) {
+        pw_stream_queue_buffer(v->stream, b);
         return;
     }
     offs = SPA_MIN(buf->datas[0].chunk->offset, buf->datas[0].maxsize);
@@ -181,6 +182,8 @@ capture_on_process(void *data)

     if (filled < 0) {
         error_report("%p: underrun write:%u filled:%d", p, index, filled);
+        pw_stream_queue_buffer(v->stream, b);
+        return;
     } else {
         if ((uint32_t) filled + n_bytes > RINGBUFFER_SIZE) {
             error_report("%p: overrun write:%u filled:%d + size:%u > max:%u",