[vlc-devel] commit: Call XInitThreads early enough ( Rémi Denis-Courmont )

git version control git at videolan.org
Sun Mar 1 12:51:03 CET 2009


vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Sun Mar  1 13:41:46 2009 +0200| [364868f96ff0d745905fec4b9df35942fd8c0d7b] | committer: Rémi Denis-Courmont 

Call XInitThreads early enough

We need to call XInitThreads before anyone tries XOpenDisplay or
something, and XInitThreads itself is not re-entrant, so call it before
we start LibVLC. This only "fixes" Xlib with VLC. Other LibVLC users
need to do something similar themselves. LibVLC cannot do it. Other
application may have already connected to X before it starts LibVLC.

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=364868f96ff0d745905fec4b9df35942fd8c0d7b
---

 bin/vlc.c    |   13 ++++++++++++-
 configure.ac |    3 +++
 2 files changed, 15 insertions(+), 1 deletions(-)

diff --git a/bin/vlc.c b/bin/vlc.c
index 3a15722..5220618 100644
--- a/bin/vlc.c
+++ b/bin/vlc.c
@@ -33,7 +33,9 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <locale.h>
-
+#ifdef HAVE_X11_XLIB_H
+# include <X11/Xlib.h>
+#endif
 
 /* Explicit HACK */
 extern void LocaleFree (const char *);
@@ -82,6 +84,15 @@ int main( int i_argc, const char *ppsz_argv[] )
 #   endif
 #endif
 
+#ifdef HAVE_X11_XLIB_H
+    /* Initialize Xlib thread support. */
+    if (!XInitThreads ())
+    {
+        fputs ("VLC requires a thread-safe Xlib. Sorry.\n", stderr);
+        return 1;
+    }
+#endif
+
     /* Synchronously intercepted POSIX signals.
      *
      * In a threaded program such as VLC, the only sane way to handle signals
diff --git a/configure.ac b/configure.ac
index 8e34d40..568932b 100644
--- a/configure.ac
+++ b/configure.ac
@@ -3964,6 +3964,9 @@ AC_ARG_ENABLE(x11,
 
 CPPFLAGS="${CPPFLAGS_save} ${X_CFLAGS}"
 AC_CHECK_HEADERS(X11/Xlib.h, [
+  VLC_ADD_CPPFLAGS([vlc], [${X_CFLAGS}])
+  VLC_ADD_LIBS([vlc], [${X_LIBS} ${X_PRE_LIBS} -lX11])
+
   VLC_ADD_PLUGIN([screen])
   VLC_ADD_CPPFLAGS([screen],[${X_CFLAGS}])
   VLC_ADD_LIBS([screen],[${X_LIBS} ${X_PRE_LIBS} -lX11])




More information about the vlc-devel mailing list