Fix reflinks

This commit is contained in:
Kamil Trzcinski
2022-04-05 15:03:47 +02:00
parent 77fc9bfdbb
commit 1112be661e
2 changed files with 24 additions and 5 deletions

View File

@ -30,7 +30,11 @@ bool buffer_consumed(buffer_t *buf)
}
pthread_mutex_lock(&buffer_lock);
if (!buf->enqueued && buf->mmap_reflinks == 1) {
if (buf->mmap_reflinks > 0) {
buf->mmap_reflinks--;
}
if (!buf->enqueued && buf->mmap_reflinks == 0) {
// update used bytes
if (buf->buf_list->do_mplanes) {
buf->v4l2_plane.bytesused = buf->used;
@ -44,17 +48,16 @@ bool buffer_consumed(buffer_t *buf)
buf->enqueued_time_us = get_monotonic_time_us(NULL, &buf->v4l2_buffer.timestamp);
E_XIOCTL(buf, buf->buf_list->device->fd, VIDIOC_QBUF, &buf->v4l2_buffer, "Can't queue buffer.");
buf->enqueued = true;
buf->mmap_reflinks--;
}
pthread_mutex_unlock(&buffer_lock);
return true;
error:
{
buffer_t *mmap_source = buf->mmap_source;
buf->mmap_source = NULL;
buf->mmap_reflinks--;
pthread_mutex_unlock(&buffer_lock);
if (mmap_source) {