This is a problem for the libinput driver that uses the same context across multiple devices. The driver may be halfway through setting up an input device (and the only way to do so is to add it to libinput) when the input thread comes in an reads events. This then causes mayhem when data is dereferenced that hasn't been set up yet. In my case the cause was the call to libinput_path_remove_device() inside preinit racing with evdev_dispatch_device() handling of ENODEV. The sequence was: - thread 2 gets an event and calls evdev_dispatch_device() - thread 1 calls libinput_path_remove_device() which sets the device->source to NULL - thread 2 reads from the fd, gets ENODEV and now removes the device->source, dereferencing the null-pointer This is the one I could reproduce the most, but there are other potential pitfalls that affect any driver that uses the same fd for multiple devices. Avoid all this and wrap PreInit into the lock. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Keith Packard <keithp@keithp.com> |
||
---|---|---|
Xext | ||
Xi | ||
composite | ||
config | ||
damageext | ||
dbe | ||
dix | ||
doc | ||
dri3 | ||
exa | ||
fb | ||
glamor | ||
glx | ||
hw | ||
include | ||
m4 | ||
man | ||
mi | ||
miext | ||
os | ||
present | ||
pseudoramiX | ||
randr | ||
record | ||
render | ||
test | ||
xfixes | ||
xkb | ||
.dir-locals.el | ||
.gitignore | ||
COPYING | ||
Makefile.am | ||
README | ||
autogen.sh | ||
configure.ac | ||
devbook.am | ||
docbook.am | ||
fix-miregion | ||
fix-miregion-private | ||
fix-patch-whitespace | ||
fix-region | ||
manpages.am | ||
xorg-server.m4 | ||
xorg-server.pc.in | ||
xserver.ent.in |
X Server The X server accepts requests from client applications to create windows, which are (normally rectangular) "virtual screens" that the client program can draw into. Windows are then composed on the actual screen by the X server (or by a separate composite manager) as directed by the window manager, which usually communicates with the user via graphical controls such as buttons and draggable titlebars and borders. For a comprehensive overview of X Server and X Window System, consult the following article: http://en.wikipedia.org/wiki/X_server All questions regarding this software should be directed at the Xorg mailing list: http://lists.freedesktop.org/mailman/listinfo/xorg Please submit bug reports to the Xorg bugzilla: https://bugs.freedesktop.org/enter_bug.cgi?product=xorg The master development code repository can be found at: git://anongit.freedesktop.org/git/xorg/xserver http://cgit.freedesktop.org/xorg/xserver For patch submission instructions, see: http://www.x.org/wiki/Development/Documentation/SubmittingPatches For more information on the git code manager, see: http://wiki.x.org/wiki/GitPage