[FFmpeg-devel] [PATCH] ffplay: more robust mutex, condition variable handling

Ganesh Ajjanagadde gajjanagadde at gmail.com
Mon Sep 28 04:22:21 CEST 2015


On Sun, Sep 27, 2015 at 9:35 PM, Ganesh Ajjanagadde
<gajjanagadde at gmail.com> wrote:
> SDL_CreateMutex and SDL_CreateCond can fail:
> https://wiki.libsdl.org/SDL_CreateMutex.
> This patch makes handling more robust in one instance.
>
> Signed-off-by: Ganesh Ajjanagadde <gajjanagadde at gmail.com>
> ---
>  ffplay.c | 23 +++++++++++++++++------
>  1 file changed, 17 insertions(+), 6 deletions(-)
>
> diff --git a/ffplay.c b/ffplay.c
> index 10887e1..27af336 100644
> --- a/ffplay.c
> +++ b/ffplay.c
> @@ -451,12 +451,21 @@ static int packet_queue_put_nullpacket(PacketQueue *q, int stream_index)
>  }
>
>  /* packet queue handling */
> -static void packet_queue_init(PacketQueue *q)
> +static int packet_queue_init(PacketQueue *q)
>  {
>      memset(q, 0, sizeof(PacketQueue));
>      q->mutex = SDL_CreateMutex();
> +    if (!q->mutex) {
> +        av_log(q, AV_LOG_FATAL, "SDL_CreateMutex(): %s\n", SDL_GetError());
> +        return AVERROR(EINVAL);
> +    }
>      q->cond = SDL_CreateCond();
> +    if (!q->cond) {
> +        av_log(q, AV_LOG_FATAL, "SDL_CreateCond(): %s\n", SDL_GetError());
> +        return AVERROR(EINVAL);
> +    }
>      q->abort_request = 1;
> +    return 0;
>  }
>
>  static void packet_queue_flush(PacketQueue *q)
> @@ -479,8 +488,10 @@ static void packet_queue_flush(PacketQueue *q)
>  static void packet_queue_destroy(PacketQueue *q)
>  {
>      packet_queue_flush(q);
> -    SDL_DestroyMutex(q->mutex);
> -    SDL_DestroyCond(q->cond);
> +    if (q->mutex)
> +        SDL_DestroyMutex(q->mutex);
> +    if (q->cond)
> +        SDL_DestroyCond(q->cond);
>  }
>
>  static void packet_queue_abort(PacketQueue *q)
> @@ -3136,9 +3147,9 @@ static VideoState *stream_open(const char *filename, AVInputFormat *iformat)
>      if (frame_queue_init(&is->sampq, &is->audioq, SAMPLE_QUEUE_SIZE, 1) < 0)
>          goto fail;
>
> -    packet_queue_init(&is->videoq);
> -    packet_queue_init(&is->audioq);
> -    packet_queue_init(&is->subtitleq);
> +    if (!packet_queue_init(&is->videoq) || !packet_queue_init(&is->audioq)
> +        || packet_queue_init(&is->subtitleq))
> +        goto fail;
>
>      is->continue_read_thread = SDL_CreateCond();
>
> --
> 2.5.3
>

please ignore this - wrong patch. Apologies.


More information about the ffmpeg-devel mailing list