[FFmpeg-devel] [PATCH] ffplay: more robust mutex, condition variable handling
Ganesh Ajjanagadde
gajjanagadde at gmail.com
Mon Sep 28 03:35:20 CEST 2015
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
More information about the ffmpeg-devel
mailing list