[vlc-devel] [PATCH 2/3] queue: helpers for killable queues
Steve Lhomme
robux4 at ycbcr.xyz
Tue Apr 14 07:43:24 CEST 2020
On 2020-04-11 21:12, RĂ©mi Denis-Courmont wrote:
> 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;
What's the point of returning a bool if it's always the same value. And
why not return it directly rather than using a pointer ?
> + 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)
I would put the bool test in a surrounding if().
> + vlc_queue_Wait(q);
> +
> + entry = vlc_queue_DequeueUnlocked(q, offset);
> + vlc_queue_Unlock(q);
> + return entry;
> +}
> +
> +/** @} */
> +
> /** @} */
> #endif
> --
> 2.26.0
>
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel
>
More information about the vlc-devel
mailing list