Disable usage of Xlib
authorRémi Denis-Courmont <remi@remlab.net>
Sat, 30 Oct 2010 14:56:59 +0000 (17:56 +0300)
committerJean-Baptiste Kempf <jb@videolan.org>
Sat, 30 Oct 2010 15:06:20 +0000 (17:06 +0200)
commit3b1835d70aa38e4d86bcb9024c365e6b353766e4
treedf921e30ba1545825b512a0d1f93c246ba615923
parent039f78b901132108aee1e15896b4b5392398c245
Disable usage of Xlib

Close #240001

VLC plugins call XInitThreads() before XOpenDisplay(). As per the
Xlib documentation, this is required to use Xlib from more than one
thread in a single process, which is to say any other thread besides
the Qt main loop thread. Do note that, contrary to XLockDisplay(),
XInitThreads() _must_ be called even if Display pointers are not
shared across threads. In fact, XInitThreads() initialize locks around
static data within Xlib.

Unfortunately, XCloseDisplay() will crash if XInitThreads() is
called for the first time only after XOpenDisplay(). By design,
XInitThreads() must be called from main() before Qt or anything else
uses Xlib. Phonon cannot force the main application to call
XInitThreads(), and indeed none that I know do it correctly today.

As an alternative, VLC provides an undocumented --no-xlib option. It
blacklists all VLC plugins that call XInitThreads() because they are
known to depend on Xlib. This is the only viable solution that does not
involve changing libQtGUI, libX11 and/or all Phonon applications.

Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
vlc/vlcloader.cpp