Add get_packet_no_wait for tasks that should not wait indefinitely
parent
cfdfe8344a
commit
d194a97df8
|
@ -434,6 +434,32 @@ int PacketQueue::packet_count(int stream_id) {
|
||||||
return packet_counts[stream_id];
|
return packet_counts[stream_id];
|
||||||
} // end int PacketQueue::packet_count(int stream_id)
|
} // end int PacketQueue::packet_count(int stream_id)
|
||||||
|
|
||||||
|
ZMLockedPacket *PacketQueue::get_packet_no_wait(packetqueue_iterator *it) {
|
||||||
|
if (deleting or zm_terminate)
|
||||||
|
return nullptr;
|
||||||
|
|
||||||
|
Debug(4, "Locking in get_packet using it %p queue end? %d",
|
||||||
|
std::addressof(*it), (*it == pktQueue.end()));
|
||||||
|
|
||||||
|
// scope for lock
|
||||||
|
std::unique_lock<std::mutex> lck(mutex);
|
||||||
|
Debug(4, "Have Lock in get_packet");
|
||||||
|
if ((*it == pktQueue.end()) and !(deleting or zm_terminate)) {
|
||||||
|
Debug(2, "waiting. Queue size %zu it == end? %d", pktQueue.size(), (*it == pktQueue.end()));
|
||||||
|
condition.wait(lck);
|
||||||
|
}
|
||||||
|
if ((*it == pktQueue.end()) or deleting or zm_terminate) return nullptr;
|
||||||
|
|
||||||
|
std::shared_ptr<ZMPacket> p = *(*it);
|
||||||
|
ZMLockedPacket *lp = new ZMLockedPacket(p);
|
||||||
|
if (lp->trylock()) {
|
||||||
|
Debug(2, "Locked packet %d, unlocking packetqueue mutex", p->image_index);
|
||||||
|
return lp;
|
||||||
|
}
|
||||||
|
delete lp;
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
// Returns a packet. Packet will be locked
|
// Returns a packet. Packet will be locked
|
||||||
ZMLockedPacket *PacketQueue::get_packet(packetqueue_iterator *it) {
|
ZMLockedPacket *PacketQueue::get_packet(packetqueue_iterator *it) {
|
||||||
if (deleting or zm_terminate)
|
if (deleting or zm_terminate)
|
||||||
|
|
|
@ -77,6 +77,7 @@ class PacketQueue {
|
||||||
bool increment_it(packetqueue_iterator *it);
|
bool increment_it(packetqueue_iterator *it);
|
||||||
bool increment_it(packetqueue_iterator *it, int stream_id);
|
bool increment_it(packetqueue_iterator *it, int stream_id);
|
||||||
ZMLockedPacket *get_packet(packetqueue_iterator *);
|
ZMLockedPacket *get_packet(packetqueue_iterator *);
|
||||||
|
ZMLockedPacket *get_packet_no_wait(packetqueue_iterator *);
|
||||||
ZMLockedPacket *get_packet_and_increment_it(packetqueue_iterator *);
|
ZMLockedPacket *get_packet_and_increment_it(packetqueue_iterator *);
|
||||||
packetqueue_iterator *get_video_it(bool wait);
|
packetqueue_iterator *get_video_it(bool wait);
|
||||||
packetqueue_iterator *get_stream_it(int stream_id);
|
packetqueue_iterator *get_stream_it(int stream_id);
|
||||||
|
|
Loading…
Reference in New Issue