diff --git a/hw/buffer_queue.c b/hw/buffer_queue.c index 7e21b50..f3aacb2 100644 --- a/hw/buffer_queue.c +++ b/hw/buffer_queue.c @@ -30,10 +30,12 @@ bool buffer_consumed(buffer_t *buf, const char *who) } pthread_mutex_lock(&buffer_lock); - if (buf->mmap_reflinks > 0) { - buf->mmap_reflinks--; + if (buf->mmap_reflinks == 0) { + E_LOG_PERROR(buf, "Non symmetric reference counts"); } + buf->mmap_reflinks--; + if (!buf->enqueued && buf->mmap_reflinks == 0) { // update used bytes if (buf->buf_list->do_mplanes) { @@ -171,6 +173,10 @@ buffer_t *buffer_list_dequeue(buffer_list_t *buf_list) } buf->v4l2_buffer.flags = v4l2_buf.flags; + if (buf->mmap_reflinks > 0) { + E_LOG_PERROR(buf, "Buffer appears to be enqueued? (links=%d)", buf->mmap_reflinks); + } + buf->enqueued = false; buf->mmap_reflinks = 1; uint64_t enqueued_time_us = get_monotonic_time_us(NULL, NULL) - buf->enqueued_time_us;