[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