From e20e9b9033b75fac32a4a3bc2cdd3fcc3cedb33a Mon Sep 17 00:00:00 2001 From: Marton Balint Date: Sat, 12 Nov 2016 02:07:24 +0100 Subject: lavf/fifo: fix undefined behaviour in deinit when destroying mutex Reviewed-by: Jan Sebechlebsky Signed-off-by: Marton Balint --- libavformat/fifo.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'libavformat') diff --git a/libavformat/fifo.c b/libavformat/fifo.c index 15435fe308..8f525e56cb 100644 --- a/libavformat/fifo.c +++ b/libavformat/fifo.c @@ -73,6 +73,7 @@ typedef struct FifoContext { int restart_with_keyframe; pthread_mutex_t overflow_flag_lock; + int overflow_flag_lock_initialized; /* Value > 0 signals queue overflow */ volatile uint8_t overflow_flag; @@ -515,6 +516,7 @@ static int fifo_init(AVFormatContext *avf) ret = pthread_mutex_init(&fifo->overflow_flag_lock, NULL); if (ret < 0) return AVERROR(ret); + fifo->overflow_flag_lock_initialized = 1; return 0; } @@ -601,7 +603,8 @@ static void fifo_deinit(AVFormatContext *avf) av_dict_free(&fifo->format_options); avformat_free_context(fifo->avf); av_thread_message_queue_free(&fifo->queue); - pthread_mutex_destroy(&fifo->overflow_flag_lock); + if (fifo->overflow_flag_lock_initialized) + pthread_mutex_destroy(&fifo->overflow_flag_lock); } #define OFFSET(x) offsetof(FifoContext, x) -- cgit v1.2.3