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

Qt4: fix x11_display double free and leaks

parent 630dbe9f
...@@ -293,15 +293,19 @@ static int Open( vlc_object_t *p_this, bool isDialogProvider ) ...@@ -293,15 +293,19 @@ static int Open( vlc_object_t *p_this, bool isDialogProvider )
#ifdef Q_WS_X11 #ifdef Q_WS_X11
if( !XInitThreads() ) if( !XInitThreads() )
return VLC_EGENERIC; return VLC_EGENERIC;
x11_display = var_CreateGetNonEmptyString( p_intf, "x11-display" );
char *display = var_CreateGetNonEmptyString( p_intf, "x11-display" );
Display *p_display = XOpenDisplay( x11_display ); Display *p_display = XOpenDisplay( x11_display );
if( !p_display ) if( !p_display )
{ {
msg_Err( p_intf, "Could not connect to X server" ); msg_Err( p_intf, "Could not connect to X server" );
free (display);
return VLC_EGENERIC; return VLC_EGENERIC;
} }
XCloseDisplay( p_display ); XCloseDisplay( p_display );
putenv( (char *)"XLIB_SKIP_ARGB_VISUALS=1" ); putenv( (char *)"XLIB_SKIP_ARGB_VISUALS=1" );
#else
char *display = NULL;
#endif #endif
bool busy; bool busy;
...@@ -312,6 +316,7 @@ static int Open( vlc_object_t *p_this, bool isDialogProvider ) ...@@ -312,6 +316,7 @@ static int Open( vlc_object_t *p_this, bool isDialogProvider )
if (busy) if (busy)
{ {
msg_Err (p_this, "cannot start Qt4 multiple times"); msg_Err (p_this, "cannot start Qt4 multiple times");
free (display);
return VLC_EGENERIC; return VLC_EGENERIC;
} }
...@@ -327,11 +332,13 @@ static int Open( vlc_object_t *p_this, bool isDialogProvider ) ...@@ -327,11 +332,13 @@ 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;
free (display);
vlc_mutex_lock (&one.lock); vlc_mutex_lock (&one.lock);
one.busy = false; one.busy = false;
vlc_mutex_unlock (&one.lock); vlc_mutex_unlock (&one.lock);
return VLC_ENOMEM; return VLC_ENOMEM;
} }
x11_display = display;
/* */ /* */
vlc_sem_wait (&ready); vlc_sem_wait (&ready);
...@@ -369,13 +376,14 @@ static void Close( vlc_object_t *p_this ) ...@@ -369,13 +376,14 @@ static void Close( vlc_object_t *p_this )
QVLCApp::triggerQuit(); QVLCApp::triggerQuit();
vlc_join (p_sys->thread, NULL); vlc_join (p_sys->thread, NULL);
#ifdef Q_WS_X11
free (x11_display);
x11_display = NULL;
#endif
delete p_sys; delete p_sys;
vlc_mutex_lock (&one.lock); vlc_mutex_lock (&one.lock);
one.busy = false; one.busy = false;
vlc_mutex_unlock (&one.lock); vlc_mutex_unlock (&one.lock);
#ifdef Q_WS_X11
free (x11_display);
#endif
} }
static void *Thread( void *obj ) static void *Thread( void *obj )
...@@ -503,11 +511,7 @@ static void *Thread( void *obj ) ...@@ -503,11 +511,7 @@ static void *Thread( void *obj )
/* Destroy the MainInputManager */ /* Destroy the MainInputManager */
MainInputManager::killInstance(); MainInputManager::killInstance();
/* Delete the application automatically */ /* Delete the application automatically */
#ifdef Q_WS_X11
free( x11_display );
#endif
return NULL; return NULL;
} }
......
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