From a44bbf8e345d3eefea92e2b05bb1034ae1bd46b7 Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Wed, 8 Sep 2021 18:35:01 -0400 Subject: [PATCH] use get_packet_and_increment_it instead of the two step to improve locking --- src/zm_monitor.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/zm_monitor.cpp b/src/zm_monitor.cpp index 32b9161ac..44e032979 100644 --- a/src/zm_monitor.cpp +++ b/src/zm_monitor.cpp @@ -1723,7 +1723,7 @@ bool Monitor::Analyse() { // if have event, send frames until we find a video packet, at which point do analysis. Adaptive skip should only affect which frames we do analysis on. // get_analysis_packet will lock the packet and may wait if analysis_it is at the end - ZMLockedPacket *packet_lock = packetqueue.get_packet(analysis_it); + ZMLockedPacket *packet_lock = packetqueue.get_packet_and_increment_it(analysis_it); if (!packet_lock) return false; std::shared_ptr snap = packet_lock->packet_; @@ -1731,13 +1731,11 @@ bool Monitor::Analyse() { if (snap->score != -1) { Error("skipping because score was %d", snap->score); packetqueue.unlock(packet_lock); - packetqueue.increment_it(analysis_it); return false; } // Store the it that points to our snap we will need it later - packetqueue_iterator snap_it = *analysis_it; - packetqueue.increment_it(analysis_it); + packetqueue_iterator snap_it = std::prev(*analysis_it); // signal is set by capture bool signal = shared_data->signal;