From 6e6b3d097bac3e08f4a7f53756c8f16b2acbd4e8 Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Thu, 24 Apr 2025 08:15:18 +0530 Subject: [PATCH] Fix lock around deleting causinganalysis to hang --- src/zm_packetqueue.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/zm_packetqueue.cpp b/src/zm_packetqueue.cpp index 228b99eaf..5d7e4640f 100644 --- a/src/zm_packetqueue.cpp +++ b/src/zm_packetqueue.cpp @@ -419,7 +419,10 @@ void PacketQueue::clearPackets(const std::shared_ptr &add_packet) { } // end voidPacketQueue::clearPackets(ZMPacket* zm_packet) void PacketQueue::stop() { - deleting = true; + { + std::unique_lock lck(mutex); + deleting = true; + } condition.notify_all(); for (const auto &p : pktQueue) { p->notify_all(); @@ -544,7 +547,7 @@ ZMPacketLock PacketQueue::get_packet(packetqueue_iterator *it) { Debug(2, "waiting on packet %d. Queue size %zu it == end? %d", p->image_index, pktQueue.size(), (*it == pktQueue.end())); condition.wait(lck); - } // end while !lp + } // end while ! deleting or zm_terminate } // end scope for lock Debug(1, "terminated, leaving");