[vlc-devel] [PATCH 2/3] queue: helpers for killable queues
RĂ©mi Denis-Courmont
remi at remlab.net
Sat Apr 11 21:12:40 CEST 2020
This adds two functions to simplify the common case of a thread waiting on
a queue until it is terminated.
---
include/vlc_queue.h | 42 ++++++++++++++++++++++++++++++++++++++++++
1 file changed, 42 insertions(+)
diff --git a/include/vlc_queue.h b/include/vlc_queue.h
index eed69510dc..f41d72fb55 100644
--- a/include/vlc_queue.h
+++ b/include/vlc_queue.h
@@ -214,5 +214,47 @@ VLC_USED;
*/
VLC_API void *vlc_queue_DequeueAll(vlc_queue_t *) VLC_USED;
+/**
+ * @defgroup queue_killable Killable queues
+ *
+ * Thread-safe queues with an end flag.
+ *
+ * @{
+ */
+
+/**
+ * Marks a queue ended.
+ */
+static inline void vlc_queue_Kill(vlc_queue_t *q,
+ bool *restrict tombstone)
+{
+ vlc_queue_Lock(q);
+ *tombstone = true;
+ vlc_queue_Signal(q);
+ vlc_queue_Unlock(q);
+}
+
+/**
+ * Dequeues one entry from a killable queue.
+ *
+ * @return an entry, or NULL if the queue is empty and has been ended.
+ */
+static inline void *vlc_queue_DequeueKillable(vlc_queue_t *q,
+ ptrdiff_t offset,
+ bool *restrict tombstone)
+{
+ void *entry;
+
+ vlc_queue_Lock(q);
+ while (vlc_queue_IsEmpty(q) && !*tombstone)
+ vlc_queue_Wait(q);
+
+ entry = vlc_queue_DequeueUnlocked(q, offset);
+ vlc_queue_Unlock(q);
+ return entry;
+}
+
+/** @} */
+
/** @} */
#endif
--
2.26.0
More information about the vlc-devel
mailing list