From 6a0feafebe0e74bf7ce2d12a8177c670ebf2379a Mon Sep 17 00:00:00 2001 From: lee ju Date: Sat, 4 Aug 2018 10:19:45 +0000 Subject: [PATCH] avcodec/frame_thread_encoder: fix memory leak that occurs when close encoder without sending eof and receiving to end Signed-off-by: Michael Niedermayer --- libavcodec/frame_thread_encoder.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/libavcodec/frame_thread_encoder.c b/libavcodec/frame_thread_encoder.c index 5ff3f7863c..55756c4c54 100644 --- a/libavcodec/frame_thread_encoder.c +++ b/libavcodec/frame_thread_encoder.c @@ -251,6 +251,23 @@ void ff_frame_thread_encoder_free(AVCodecContext *avctx){ pthread_join(c->worker[i], NULL); } + while (av_fifo_size(c->task_fifo) > 0) { + Task task; + AVFrame *frame; + av_fifo_generic_read(c->task_fifo, &task, sizeof(task), NULL); + frame = task.indata; + av_frame_free(&frame); + task.indata = NULL; + } + + for (i=0; ifinished_tasks[i].outdata != NULL) { + AVPacket *pkt = c->finished_tasks[i].outdata; + av_packet_free(&pkt); + c->finished_tasks[i].outdata = NULL; + } + } + pthread_mutex_destroy(&c->task_fifo_mutex); pthread_mutex_destroy(&c->finished_task_mutex); pthread_mutex_destroy(&c->buffer_mutex);