Thomas Guillem: > Reproduced when using the VAAPI va module on VLC 4.0. No leaks when > setting thread count to 1. > --- > libavcodec/pthread_frame.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/libavcodec/pthread_frame.c b/libavcodec/pthread_frame.c > index 73b1b7d7d9..4c578aa44a 100644 > --- a/libavcodec/pthread_frame.c > +++ b/libavcodec/pthread_frame.c > @@ -747,6 +747,7 @@ void ff_frame_thread_free(AVCodecContext *avctx, int > thread_count) > av_buffer_unref(&ctx->internal->pool); > av_freep(&ctx->internal); > av_buffer_unref(&ctx->hw_frames_ctx); > + av_buffer_unref(&ctx->hw_device_ctx); > } > > av_frame_free(&p->frame); >
The AVCodecContext that is freed here is not a full AVCodecContext: It never received a reference to hw_device_ctx of its own. Unreferencing this here will therefore mess up the refcount and lead to use-after-frees. (What is the reference count of hw_device_ctx at this point? Libavcodec should only hold one reference at that point, namely the one in the main (user-facing) AVCodecContext; this reference will be unreferenced when avcodec_close()/avcodec_free_context() is called for the main context.) - Andreas _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".