]> git.sesse.net Git - vlc/commitdiff
Qt4: fail cleanly if started multiple times (instead of crashing)
authorRémi Denis-Courmont <remi@remlab.net>
Sat, 20 Feb 2010 14:50:17 +0000 (16:50 +0200)
committerRémi Denis-Courmont <remi@remlab.net>
Sat, 20 Feb 2010 14:52:22 +0000 (16:52 +0200)
modules/gui/qt4/qt4.cpp

index 24a3219fdf48d04adc55559a7f26ae1749069c47..b7e456f012192f5dc1c2c25bf6e6c7ab579e8878 100644 (file)
@@ -271,6 +271,7 @@ static vlc_sem_t ready;
 #ifdef Q_WS_X11
 static char *x11_display = NULL;
 #endif
+static vlc_mutex_t lock = VLC_STATIC_MUTEX;
 
 /*****************************************************************************
  * Module callbacks
@@ -293,6 +294,12 @@ static int Open( vlc_object_t *p_this, bool isDialogProvider )
     putenv( (char *)"XLIB_SKIP_ARGB_VISUALS=1" );
 #endif
 
+    if (vlc_mutex_trylock (&lock))
+    {
+        msg_Err (p_this, "cannot start Qt4 multiple times");
+        return VLC_EGENERIC;
+    }
+
     /* Allocations of p_sys */
     intf_sys_t *p_sys = p_intf->p_sys = new intf_sys_t;
     p_intf->p_sys->b_isDialogProvider = isDialogProvider;
@@ -305,6 +312,7 @@ static int Open( vlc_object_t *p_this, bool isDialogProvider )
     if( vlc_clone( &p_sys->thread, Thread, p_intf, VLC_THREAD_PRIORITY_LOW ) )
     {
         delete p_sys;
+        vlc_mutex_unlock (&lock);
         return VLC_ENOMEM;
     }
 
@@ -346,6 +354,7 @@ static void Close( vlc_object_t *p_this )
 
     vlc_join (p_sys->thread, NULL);
     delete p_sys;
+    vlc_mutex_unlock (&lock);
 #ifdef Q_WS_X11
     free (x11_display);
 #endif