From adfd480956f743d2e499b3ea8eb5a9a8c5f02b5c Mon Sep 17 00:00:00 2001 From: "Steinar H. Gunderson" Date: Sat, 14 Nov 2015 13:55:22 +0100 Subject: [PATCH] Fix a queue access not under a mutex. --- bmusb.cpp | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/bmusb.cpp b/bmusb.cpp index 8639b93..0582b99 100644 --- a/bmusb.cpp +++ b/bmusb.cpp @@ -120,6 +120,7 @@ bool uint16_less_than_with_wraparound(uint16_t a, uint16_t b) void BMUSBCapture::queue_frame(uint16_t format, uint16_t timecode, FrameAllocator::Frame frame, deque *q) { + unique_lock lock(queue_lock); if (!q->empty() && !uint16_less_than_with_wraparound(q->back().timecode, timecode)) { printf("Blocks going backwards: prev=0x%04x, cur=0x%04x (dropped)\n", q->back().timecode, timecode); @@ -131,11 +132,7 @@ void BMUSBCapture::queue_frame(uint16_t format, uint16_t timecode, FrameAllocato qf.format = format; qf.timecode = timecode; qf.frame = frame; - - { - unique_lock lock(queue_lock); - q->push_back(move(qf)); - } + q->push_back(move(qf)); queues_not_empty.notify_one(); // might be spurious } -- 2.39.2