[vlc-devel] [PATCH 2/3] queue: helpers for killable queues
Rémi Denis-Courmont
remi at remlab.net
Tue Apr 14 09:37:38 CEST 2020
Le tiistaina 14. huhtikuuta 2020, 8.43.24 EEST Steve Lhomme a écrit :
> 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 ?
There would be no point returning a constant indeed. And the code doesn't.
> > + 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().
That's not how condition variables work.
> > + vlc_queue_Wait(q);
> > +
> > + entry = vlc_queue_DequeueUnlocked(q, offset);
> > + vlc_queue_Unlock(q);
> > + return entry;
> > +}
> > +
> > +/** @} */
> > +
> >
> > /** @} */
> > #endif
>
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel
--
Rémi Denis-Courmont
Tapiola new town, Uusimaan Republic
More information about the vlc-devel
mailing list