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 <gajjanaga...@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 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel