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

Do not assume that Open and Close are called in the same thread

parent 809e98a6
...@@ -271,7 +271,11 @@ static vlc_sem_t ready; ...@@ -271,7 +271,11 @@ static vlc_sem_t ready;
#ifdef Q_WS_X11 #ifdef Q_WS_X11
static char *x11_display = NULL; static char *x11_display = NULL;
#endif #endif
static vlc_mutex_t lock = VLC_STATIC_MUTEX; static struct
{
vlc_mutex_t lock;
bool busy;
} one = { VLC_STATIC_MUTEX, false };
/***************************************************************************** /*****************************************************************************
* Module callbacks * Module callbacks
...@@ -294,7 +298,12 @@ static int Open( vlc_object_t *p_this, bool isDialogProvider ) ...@@ -294,7 +298,12 @@ static int Open( vlc_object_t *p_this, bool isDialogProvider )
putenv( (char *)"XLIB_SKIP_ARGB_VISUALS=1" ); putenv( (char *)"XLIB_SKIP_ARGB_VISUALS=1" );
#endif #endif
if (vlc_mutex_trylock (&lock)) bool busy;
vlc_mutex_lock (&one.lock);
busy = one.busy;
one.busy = true;
vlc_mutex_unlock (&one.lock);
if (busy)
{ {
msg_Err (p_this, "cannot start Qt4 multiple times"); msg_Err (p_this, "cannot start Qt4 multiple times");
return VLC_EGENERIC; return VLC_EGENERIC;
...@@ -312,7 +321,9 @@ static int Open( vlc_object_t *p_this, bool isDialogProvider ) ...@@ -312,7 +321,9 @@ static int Open( vlc_object_t *p_this, bool isDialogProvider )
if( vlc_clone( &p_sys->thread, Thread, p_intf, VLC_THREAD_PRIORITY_LOW ) ) if( vlc_clone( &p_sys->thread, Thread, p_intf, VLC_THREAD_PRIORITY_LOW ) )
{ {
delete p_sys; delete p_sys;
vlc_mutex_unlock (&lock); vlc_mutex_lock (&one.lock);
one.busy = false;
vlc_mutex_unlock (&one.lock);
return VLC_ENOMEM; return VLC_ENOMEM;
} }
...@@ -354,7 +365,9 @@ static void Close( vlc_object_t *p_this ) ...@@ -354,7 +365,9 @@ static void Close( vlc_object_t *p_this )
vlc_join (p_sys->thread, NULL); vlc_join (p_sys->thread, NULL);
delete p_sys; delete p_sys;
vlc_mutex_unlock (&lock); vlc_mutex_lock (&one.lock);
one.busy = false;
vlc_mutex_unlock (&one.lock);
#ifdef Q_WS_X11 #ifdef Q_WS_X11
free (x11_display); free (x11_display);
#endif #endif
......
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