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 * );
static void CatalogAdd( xml_t *, const char *, const char *, const char * );
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
*****************************************************************************/
......@@ -74,7 +77,13 @@ static int Open( vlc_object_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_delete = ReaderDelete;
......@@ -90,7 +99,11 @@ static int Open( 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);
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