Commit cf44d745 authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont

libxml: fix plugin re-entrancy - refs #2541

parent 25c58126
...@@ -67,6 +67,9 @@ static void CatalogLoad( xml_t *, const char * ); ...@@ -67,6 +67,9 @@ static void CatalogLoad( xml_t *, const char * );
static void CatalogAdd( xml_t *, const char *, const char *, const char * ); static void CatalogAdd( xml_t *, const char *, const char *, const char * );
static int StreamRead( void *p_context, char *p_buffer, int i_buffer ); static int StreamRead( void *p_context, char *p_buffer, int i_buffer );
static unsigned refs = 0;
static vlc_mutex_t lock = VLC_STATIC_MUTEX;
/***************************************************************************** /*****************************************************************************
* Module initialization * Module initialization
*****************************************************************************/ *****************************************************************************/
...@@ -74,7 +77,13 @@ static int Open( vlc_object_t *p_this ) ...@@ -74,7 +77,13 @@ static int Open( vlc_object_t *p_this )
{ {
xml_t *p_xml = (xml_t *)p_this; xml_t *p_xml = (xml_t *)p_this;
xmlInitParser(); if( !xmlHasFeature( XML_WITH_THREAD ) )
return VLC_EGENERIC;
vlc_mutex_lock( &lock );
if( refs++ == 0 )
xmlInitParser();
vlc_mutex_unlock( &lock );
p_xml->pf_reader_create = ReaderCreate; p_xml->pf_reader_create = ReaderCreate;
p_xml->pf_reader_delete = ReaderDelete; p_xml->pf_reader_delete = ReaderDelete;
...@@ -90,7 +99,11 @@ static int Open( vlc_object_t *p_this ) ...@@ -90,7 +99,11 @@ static int Open( vlc_object_t *p_this )
*****************************************************************************/ *****************************************************************************/
static void Close( vlc_object_t *p_this ) static void Close( vlc_object_t *p_this )
{ {
xmlCleanupParser(); vlc_mutex_lock( &lock );
if( --refs == 0 )
xmlCleanupParser();
vlc_mutex_unlock( &lock );
VLC_UNUSED(p_this); VLC_UNUSED(p_this);
return; return;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment