diff --git a/libavcodec/pthread_slice.c b/libavcodec/pthread_slice.c index b948e16d24..c8e69f0a9a 100644 --- a/libavcodec/pthread_slice.c +++ b/libavcodec/pthread_slice.c @@ -112,14 +112,26 @@ void ff_slice_thread_free(AVCodecContext *avctx) pthread_mutex_lock(&c->current_job_lock); c->done = 1; pthread_cond_broadcast(&c->current_job_cond); + for (i = 0; i < c->thread_count; i++) + pthread_cond_broadcast(&c->progress_cond[i]); pthread_mutex_unlock(&c->current_job_lock); for (i=0; ithread_count; i++) pthread_join(c->workers[i], NULL); + for (i = 0; i < c->thread_count; i++) { + pthread_mutex_destroy(&c->progress_mutex[i]); + pthread_cond_destroy(&c->progress_cond[i]); + } + pthread_mutex_destroy(&c->current_job_lock); pthread_cond_destroy(&c->current_job_cond); pthread_cond_destroy(&c->last_job_cond); + + av_freep(&c->entries); + av_freep(&c->progress_mutex); + av_freep(&c->progress_cond); + av_freep(&c->workers); av_freep(&avctx->internal->thread_ctx); }