[vlc-devel] [PATCH] decoder_helpers: fix clean order
Steve Lhomme
robux4 at ycbcr.xyz
Wed Feb 20 10:08:54 CET 2019
On 19/02/2019 13:24, Thomas Guillem wrote:
> The module need to be unloaded before the dec struct is cleaned.
>
> This fixes an undefined behavior with threaded decoders like avcodec when they
> called decoder_UpdateVideoFormat()/dec_NewPicture() from an other thread just
> before they were unloaded.
Are there cases where the decoder is still calling
decoder_UpdateVideoFormat() and decoder_NewPicture() while being about
to be unloaded ? I don't see how this can work if one thread of the
decoder is calling decoder_UpdateVideoFormat() while another thread is
unloading the decoder DLLs. If that can happen I think the undefined
behavior is the least of our problem.
AFAIK lavc always call decoder_UpdateVideoFormat()/decoder_NewPicture()
from the same (decoder?) thread.
This is an important thing because the decoder pool will be released
there as well as the video context reference count.
> ---
> src/input/decoder_helpers.c | 11 ++++++-----
> 1 file changed, 6 insertions(+), 5 deletions(-)
>
> diff --git a/src/input/decoder_helpers.c b/src/input/decoder_helpers.c
> index 3cc02de8d6..b0a7c1890a 100644
> --- a/src/input/decoder_helpers.c
> +++ b/src/input/decoder_helpers.c
> @@ -48,6 +48,12 @@ void decoder_Init( decoder_t *p_dec, const es_format_t *restrict p_fmt )
>
> void decoder_Clean( decoder_t *p_dec )
> {
> + if ( p_dec->p_module != NULL )
> + {
> + module_unneed(p_dec, p_dec->p_module);
> + p_dec->p_module = NULL;
> + }
> +
> es_format_Clean( &p_dec->fmt_in );
> es_format_Clean( &p_dec->fmt_out );
>
> @@ -56,11 +62,6 @@ void decoder_Clean( decoder_t *p_dec )
> vlc_meta_Delete(p_dec->p_description);
> p_dec->p_description = NULL;
> }
> - if ( p_dec->p_module != NULL )
> - {
> - module_unneed(p_dec, p_dec->p_module);
> - p_dec->p_module = NULL;
> - }
> }
>
> void decoder_Destroy( decoder_t *p_dec )
> --
> 2.20.1
>
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel
More information about the vlc-devel
mailing list