[vlc-devel] [PATCH 2/3] misc/xml: only initialize libxml2 once
Rémi Denis-Courmont
remi at remlab.net
Wed Sep 23 21:06:00 CEST 2020
Hi,
Le keskiviikkona 23. syyskuuta 2020, 21.52.44 EEST Marvin Scholz a écrit :
> ---
> modules/misc/xml/libxml.c | 18 +++++++++++-------
> 1 file changed, 11 insertions(+), 7 deletions(-)
>
> diff --git a/modules/misc/xml/libxml.c b/modules/misc/xml/libxml.c
> index e077139be7f..69637892be9 100644
> --- a/modules/misc/xml/libxml.c
> +++ b/modules/misc/xml/libxml.c
> @@ -52,7 +52,15 @@ static void CatalogAdd( xml_t *p_xml, const char
> *psz_arg1, (unsigned char*)psz_filename );
> }
>
> -static vlc_mutex_t lock = VLC_STATIC_MUTEX;
> +/**************************************************************************
> *** + * libxml2 initialization
> +
> ***************************************************************************
> **/ +static vlc_once_t xml_init_once_token = VLC_STATIC_ONCE;
> +
> +static void vlc_libxml_init_once(void)
> +{
> + xmlInitParser();
> +}
If another non-concurrent piece of code initializes LibXML, uses it and
deinitializes it, between two VLC uses then I think that this will break.
AFAIK, calling xmlInitParser() everytime is the least unsafe option.
>
> /**************************************************************************
> *** * Module initialization
> @@ -64,9 +72,7 @@ static int Open( vlc_object_t *p_this )
> if( !xmlHasFeature( XML_WITH_THREAD ) )
> return VLC_EGENERIC;
>
> - vlc_mutex_lock( &lock );
> - xmlInitParser();
> - vlc_mutex_unlock( &lock );
> + vlc_once(&xml_init_once_token, vlc_libxml_init_once);
>
> p_xml->pf_catalog_load = CatalogLoad;
> p_xml->pf_catalog_add = CatalogAdd;
> @@ -232,9 +238,7 @@ static int ReaderOpen( vlc_object_t *p_this )
> if( unlikely(!p_sys) )
> return VLC_ENOMEM;
>
> - vlc_mutex_lock( &lock );
> - xmlInitParser();
> - vlc_mutex_unlock( &lock );
> + vlc_once(&xml_init_once_token, vlc_libxml_init_once);
>
> p_libxml_reader = xmlReaderForIO( StreamRead, NULL, p_reader->p_stream,
> NULL, NULL, 0 );
--
雷米‧德尼-库尔蒙
http://www.remlab.net/
More information about the vlc-devel
mailing list