diff options
author | Marton Balint <cus@passwd.hu> | 2016-11-12 04:07:24 +0300 |
---|---|---|
committer | Marton Balint <cus@passwd.hu> | 2016-11-13 05:10:36 +0300 |
commit | e20e9b9033b75fac32a4a3bc2cdd3fcc3cedb33a (patch) | |
tree | 16b4b6b80198dff5fc43848e8464b41b8bf9d6c7 | |
parent | d318e0602443558c3908c3c6e17b72f0ed299722 (diff) |
lavf/fifo: fix undefined behaviour in deinit when destroying mutex
Reviewed-by: Jan Sebechlebsky <sebechlebskyjan@gmail.com>
Signed-off-by: Marton Balint <cus@passwd.hu>
-rw-r--r-- | libavformat/fifo.c | 5 |
1 files changed, 4 insertions, 1 deletions
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) |