[vlc-devel] [PATCH] stream_fifo: use vlc_queue_t
Thomas Guillem
thomas at gllm.fr
Mon Apr 13 13:58:19 CEST 2020
LGTM
On Sun, Apr 12, 2020, at 18:46, RĂ©mi Denis-Courmont wrote:
> ...instead of block_fifo_t which is tied to block_t.
> Simplifies a little.
> ---
> src/input/stream_fifo.c | 56 ++++++++++++-----------------------------
> 1 file changed, 16 insertions(+), 40 deletions(-)
>
> diff --git a/src/input/stream_fifo.c b/src/input/stream_fifo.c
> index 4cdd548016..62e32c42a6 100644
> --- a/src/input/stream_fifo.c
> +++ b/src/input/stream_fifo.c
> @@ -34,7 +34,7 @@
> #include "stream.h"
>
> struct vlc_stream_fifo {
> - vlc_fifo_t *fifo;
> + vlc_queue_t queue;
> bool eof;
> };
>
> @@ -52,44 +52,30 @@ static vlc_stream_fifo_t
> *vlc_stream_fifo_Writer(stream_t *s)
> static void vlc_stream_fifo_Destroy(stream_t *s)
> {
> struct vlc_stream_fifo *writer = vlc_stream_fifo_Writer(s);
> - vlc_fifo_t *fifo = writer->fifo;
> block_t *block;
> bool closed;
>
> - vlc_fifo_Lock(fifo);
> - block = vlc_fifo_DequeueAllUnlocked(fifo);
> + vlc_queue_Lock(&writer->queue);
> + block = vlc_queue_DequeueAllUnlocked(&writer->queue);
> closed = writer->eof;
> writer->eof = true;
> - vlc_fifo_Unlock(fifo);
> + vlc_queue_Unlock(&writer->queue);
>
> block_ChainRelease(block);
>
> - if (closed) {
> + if (closed)
> /* Destroy shared state if write end is already closed */
> - block_FifoRelease(fifo);
> free(writer);
> - }
> }
>
> static block_t *vlc_stream_fifo_Block(stream_t *s, bool *restrict eof)
> {
> struct vlc_stream_fifo *sys = vlc_stream_fifo_Writer(s);
> - vlc_fifo_t *fifo = sys->fifo;
> - block_t *block;
> + block_t *block = vlc_queue_DequeueKillable(&sys->queue, &sys->eof);
>
> - vlc_fifo_Lock(fifo);
> - while (vlc_fifo_IsEmpty(fifo))
> - {
> - if (sys->eof)
> - {
> - *eof = true;
> - break;
> - }
> - vlc_fifo_Wait(fifo);
> - }
> + if (block == NULL)
> + *eof = true;
>
> - block = vlc_fifo_DequeueUnlocked(fifo);
> - vlc_fifo_Unlock(fifo);
> return block;
> }
>
> @@ -122,18 +108,13 @@ vlc_stream_fifo_t
> *vlc_stream_fifo_New(vlc_object_t *parent, stream_t **reader)
> if (unlikely(writer == NULL))
> return NULL;
>
> - writer->fifo = block_FifoNew();
> - if (unlikely(writer->fifo == NULL)) {
> - free(writer);
> - return NULL;
> - }
> + vlc_queue_Init(&writer->queue, offsetof (block_t, p_next));
> writer->eof = false;
>
> struct vlc_stream_fifo_private *sys;
> stream_t *s = vlc_stream_CustomNew(parent, vlc_stream_fifo_Destroy,
> sizeof (*sys), "stream");
> if (unlikely(s == NULL)) {
> - block_FifoRelease(writer->fifo);
> free(writer);
> return NULL;
> }
> @@ -149,15 +130,13 @@ vlc_stream_fifo_t
> *vlc_stream_fifo_New(vlc_object_t *parent, stream_t **reader)
>
> int vlc_stream_fifo_Queue(vlc_stream_fifo_t *writer, block_t *block)
> {
> - vlc_fifo_t *fifo = writer->fifo;
> -
> - vlc_fifo_Lock(fifo);
> + vlc_queue_Lock(&writer->queue);
> if (likely(!writer->eof))
> {
> - vlc_fifo_QueueUnlocked(fifo, block);
> + vlc_queue_EnqueueUnlocked(&writer->queue, block);
> block = NULL;
> }
> - vlc_fifo_Unlock(fifo);
> + vlc_queue_Unlock(&writer->queue);
>
> if (unlikely(block != NULL))
> {
> @@ -181,18 +160,15 @@ ssize_t vlc_stream_fifo_Write(vlc_stream_fifo_t *writer,
>
> void vlc_stream_fifo_Close(vlc_stream_fifo_t *writer)
> {
> - vlc_fifo_t *fifo = writer->fifo;
> bool closed;
>
> - vlc_fifo_Lock(fifo);
> + vlc_queue_Lock(&writer->queue);
> closed = writer->eof;
> writer->eof = true;
> - vlc_fifo_Signal(fifo);
> - vlc_fifo_Unlock(fifo);
> + vlc_queue_Signal(&writer->queue);
> + vlc_queue_Unlock(&writer->queue);
>
> - if (closed) {
> + if (closed)
> /* Destroy shared state if read end is already closed */
> - block_FifoRelease(fifo);
> free(writer);
> - }
> }
> --
> 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