[vlc-commits] commit: Qt4: fix x11_display double free and leaks ( Rémi Denis-Courmont )
git at videolan.org
git at videolan.org
Mon Mar 8 18:51:08 CET 2010
vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Mon Mar 8 19:50:54 2010 +0200| [ab3dce8b11a2c4c10ba3eb3d022e5ba78f859655] | committer: Rémi Denis-Courmont
Qt4: fix x11_display double free and leaks
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=ab3dce8b11a2c4c10ba3eb3d022e5ba78f859655
---
modules/gui/qt4/qt4.cpp | 20 ++++++++++++--------
1 files changed, 12 insertions(+), 8 deletions(-)
diff --git a/modules/gui/qt4/qt4.cpp b/modules/gui/qt4/qt4.cpp
index 256557e..0d46328 100644
--- a/modules/gui/qt4/qt4.cpp
+++ b/modules/gui/qt4/qt4.cpp
@@ -293,15 +293,19 @@ static int Open( vlc_object_t *p_this, bool isDialogProvider )
#ifdef Q_WS_X11
if( !XInitThreads() )
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 );
if( !p_display )
{
msg_Err( p_intf, "Could not connect to X server" );
+ free (display);
return VLC_EGENERIC;
}
XCloseDisplay( p_display );
putenv( (char *)"XLIB_SKIP_ARGB_VISUALS=1" );
+#else
+ char *display = NULL;
#endif
bool busy;
@@ -312,6 +316,7 @@ static int Open( vlc_object_t *p_this, bool isDialogProvider )
if (busy)
{
msg_Err (p_this, "cannot start Qt4 multiple times");
+ free (display);
return VLC_EGENERIC;
}
@@ -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 ) )
{
delete p_sys;
+ free (display);
vlc_mutex_lock (&one.lock);
one.busy = false;
vlc_mutex_unlock (&one.lock);
return VLC_ENOMEM;
}
+ x11_display = display;
/* */
vlc_sem_wait (&ready);
@@ -369,13 +376,14 @@ static void Close( vlc_object_t *p_this )
QVLCApp::triggerQuit();
vlc_join (p_sys->thread, NULL);
+#ifdef Q_WS_X11
+ free (x11_display);
+ x11_display = NULL;
+#endif
delete p_sys;
vlc_mutex_lock (&one.lock);
one.busy = false;
vlc_mutex_unlock (&one.lock);
-#ifdef Q_WS_X11
- free (x11_display);
-#endif
}
static void *Thread( void *obj )
@@ -503,11 +511,7 @@ static void *Thread( void *obj )
/* Destroy the MainInputManager */
MainInputManager::killInstance();
-
/* Delete the application automatically */
-#ifdef Q_WS_X11
- free( x11_display );
-#endif
return NULL;
}
More information about the vlc-commits
mailing list