GNOME Bugzilla – Bug 560618
Mouse plugin causes g-s-d to crash on startup
Last modified: 2008-11-20 18:01:37 UTC
** (gnome-settings-daemon:27985): DEBUG: Loading /scratch/wbolster/gnome-2-24/lib/gnome-settings-daemon-2.0/libmouse.so ** (gnome-settings-daemon:27985): DEBUG: Registering GsdMousePlugin ** (gnome-settings-daemon:27985): DEBUG: Creating object of type GsdMousePlugin ** (gnome-settings-daemon:27985): DEBUG: GsdMousePlugin initializing ** (gnome-settings-daemon:27985): DEBUG: Activating mouse plugin ** (gnome-settings-daemon:27985): DEBUG: Starting mouse manager The program 'gnome-settings-daemon' received an X Window System error. This probably reflects a bug in the program. The error was 'BadClass, invalid event class'. (Details: serial 563 error_code 175 request_code 151 minor_code 6) (Note to programmers: normally, X errors are reported asynchronously; that is, you will receive the error a while after causing it. To debug your program, run it with the --sync command line option to change this behavior. You can then get a meaningful backtrace from your debugger if you break on the gdk_x_error() function.) [1226571043,000,xklavier.c:xkl_engine_start_listen/] The backend does not require manual layout management - but it is provided by the application After removing the file/scratch/wbolster/gnome-2-24/lib/gnome-settings-daemon-2.0/libmouse.so g-s-d does not crash anymore on startup, but of course lacks functionality: ** (gnome-settings-daemon:27994): DEBUG: GnomeSettingsManager: emitting plugin-activated keyboard ** (gnome-settings-daemon:27994): DEBUG: Plugin keyboard: active ** (gnome-settings-daemon:27994): DEBUG: GnomeSettingsModule 0x778770 initialising ** (gnome-settings-daemon:27994): DEBUG: Loading /scratch/wbolster/gnome-2-24/lib/gnome-settings-daemon-2.0/libmouse.so ** (gnome-settings-daemon:27994): WARNING **: /scratch/wbolster/gnome-2-24/lib/gnome-settings-daemon-2.0/libmouse.so: cannot open shared object file: No such file or directory ** (gnome-settings-daemon:27994): WARNING **: Cannot load plugin 'Mouse' since file '/scratch/wbolster/gnome-2-24/lib/gnome-settings-daemon-2.0/libmouse.so' cannot be read. ** (gnome-settings-daemon:27994): DEBUG: GnomeSettingsModule 0x778770 finalizing ** (gnome-settings-daemon:27994): WARNING **: Error activating plugin 'Mouse' ** (gnome-settings-daemon:27994): DEBUG: Plugin mouse: activation failed
I'm not sure if this is at all useful, but here's some more information: $ gdb GNU gdb Red Hat Linux (6.6-45.fc8rh) Copyright (C) 2006 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "x86_64-redhat-linux-gnu". (gdb) file /scratch/wbolster/gnome-2-24/libexec/gnome-settings-daemon Reading symbols from /scratch/wbolster/gnome-2-24/libexec/gnome-settings-daemon...done. Using host libthread_db library "/lib64/libthread_db.so.1". (gdb) break gdk_x_error Function "gdk_x_error" not defined. Make breakpoint pending on future shared library load? (y or [n]) y Breakpoint 1 (gdk_x_error) pending. (gdb) run --no-daemon --debug --sync Starting program: /scratch/wbolster/gnome-2-24/libexec/gnome-settings-daemon --no-daemon --debug --sync Missing separate debuginfo for /scratch/wbolster/gnome-2-24/lib/libssl.so.6 Try: yum --enablerepo='*-debuginfo' install /usr/lib/debug/.build-id/27/bc4c062eae2aa77445792d92dbd7fff151cbfd.debug Missing separate debuginfo for /scratch/wbolster/gnome-2-24/lib/libcrypto.so.6 Try: yum --enablerepo='*-debuginfo' install /usr/lib/debug/.build-id/42/66326ab99e304f1fae6f9648b792026a7be9b8.debug [Thread debugging using libthread_db enabled] Breakpoint 2 at 0x2aaaab0ba880: file gdkmain-x11.c, line 613. Pending breakpoint "gdk_x_error" resolved ** (gnome-settings-daemon:31150): DEBUG: Successfully connected to D-Bus ** (gnome-settings-daemon:31150): DEBUG: Starting settings manager ** (gnome-settings-daemon:31150): DEBUG: Loading settings plugins from dir: /scratch/wbolster/gnome-2-24/lib/gnome-settings-daemon-2.0/ ** (gnome-settings-daemon:31150): DEBUG: Loading plugin: /scratch/wbolster/gnome-2-24/lib/gnome-settings-daemon-2.0/screensaver.gnome-settings-plugin ** (gnome-settings-daemon:31150): DEBUG: GnomeSettingsPluginInfo: name='Screensaver' file='/scratch/wbolster/gnome-2-24/lib/gnome-settings-daemon-2.0/screensaver.gnome-settings-plugin' location='screensaver' ** (gnome-settings-daemon:31150): DEBUG: Monitoring dir /apps/gnome_settings_daemon/plugins/screensaver for changes ** (gnome-settings-daemon:31150): DEBUG: Loading plugin: /scratch/wbolster/gnome-2-24/lib/gnome-settings-daemon-2.0/keyboard.gnome-settings-plugin ** (gnome-settings-daemon:31150): DEBUG: GnomeSettingsPluginInfo: name='Keyboard' file='/scratch/wbolster/gnome-2-24/lib/gnome-settings-daemon-2.0/keyboard.gnome-settings-plugin' location='keyboard' ** (gnome-settings-daemon:31150): DEBUG: Monitoring dir /apps/gnome_settings_daemon/plugins/keyboard for changes ** (gnome-settings-daemon:31150): DEBUG: Loading plugin: /scratch/wbolster/gnome-2-24/lib/gnome-settings-daemon-2.0/font.gnome-settings-plugin ** (gnome-settings-daemon:31150): DEBUG: GnomeSettingsPluginInfo: name='Font' file='/scratch/wbolster/gnome-2-24/lib/gnome-settings-daemon-2.0/font.gnome-settings-plugin' location='font' ** (gnome-settings-daemon:31150): DEBUG: Monitoring dir /apps/gnome_settings_daemon/plugins/font for changes ** (gnome-settings-daemon:31150): DEBUG: Loading plugin: /scratch/wbolster/gnome-2-24/lib/gnome-settings-daemon-2.0/typing-break.gnome-settings-plugin ** (gnome-settings-daemon:31150): DEBUG: GnomeSettingsPluginInfo: name='Typing Break' file='/scratch/wbolster/gnome-2-24/lib/gnome-settings-daemon-2.0/typing-break.gnome-settings-plugin' location='typing-break' ** (gnome-settings-daemon:31150): DEBUG: Monitoring dir /apps/gnome_settings_daemon/plugins/typing-break for changes ** (gnome-settings-daemon:31150): DEBUG: Loading plugin: /scratch/wbolster/gnome-2-24/lib/gnome-settings-daemon-2.0/xrdb.gnome-settings-plugin ** (gnome-settings-daemon:31150): DEBUG: GnomeSettingsPluginInfo: name='X Resource Database' file='/scratch/wbolster/gnome-2-24/lib/gnome-settings-daemon-2.0/xrdb.gnome-settings-plugin' location='xrdb' ** (gnome-settings-daemon:31150): DEBUG: Monitoring dir /apps/gnome_settings_daemon/plugins/xrdb for changes ** (gnome-settings-daemon:31150): DEBUG: Loading plugin: /scratch/wbolster/gnome-2-24/lib/gnome-settings-daemon-2.0/sound.gnome-settings-plugin ** (gnome-settings-daemon:31150): DEBUG: GnomeSettingsPluginInfo: name='Sound' file='/scratch/wbolster/gnome-2-24/lib/gnome-settings-daemon-2.0/sound.gnome-settings-plugin' location='sound' ** (gnome-settings-daemon:31150): DEBUG: Monitoring dir /apps/gnome_settings_daemon/plugins/sound for changes ** (gnome-settings-daemon:31150): DEBUG: Loading plugin: /scratch/wbolster/gnome-2-24/lib/gnome-settings-daemon-2.0/housekeeping.gnome-settings-plugin ** (gnome-settings-daemon:31150): DEBUG: GnomeSettingsPluginInfo: name='Housekeeping' file='/scratch/wbolster/gnome-2-24/lib/gnome-settings-daemon-2.0/housekeeping.gnome-settings-plugin' location='housekeeping' ** (gnome-settings-daemon:31150): DEBUG: Monitoring dir /apps/gnome_settings_daemon/plugins/housekeeping for changes ** (gnome-settings-daemon:31150): DEBUG: Loading plugin: /scratch/wbolster/gnome-2-24/lib/gnome-settings-daemon-2.0/a11y-keyboard.gnome-settings-plugin ** (gnome-settings-daemon:31150): DEBUG: GnomeSettingsPluginInfo: name='Accessibility Keyboard' file='/scratch/wbolster/gnome-2-24/lib/gnome-settings-daemon-2.0/a11y-keyboard.gnome-settings-plugin' location='a11y-keyboard' ** (gnome-settings-daemon:31150): DEBUG: Monitoring dir /apps/gnome_settings_daemon/plugins/a11y-keyboard for changes ** (gnome-settings-daemon:31150): DEBUG: Loading plugin: /scratch/wbolster/gnome-2-24/lib/gnome-settings-daemon-2.0/clipboard.gnome-settings-plugin ** (gnome-settings-daemon:31150): DEBUG: GnomeSettingsPluginInfo: name='Clipboard' file='/scratch/wbolster/gnome-2-24/lib/gnome-settings-daemon-2.0/clipboard.gnome-settings-plugin' location='clipboard' ** (gnome-settings-daemon:31150): DEBUG: Monitoring dir /apps/gnome_settings_daemon/plugins/clipboard for changes ** (gnome-settings-daemon:31150): DEBUG: Loading plugin: /scratch/wbolster/gnome-2-24/lib/gnome-settings-daemon-2.0/mouse.gnome-settings-plugin ** (gnome-settings-daemon:31150): DEBUG: GnomeSettingsPluginInfo: name='Mouse' file='/scratch/wbolster/gnome-2-24/lib/gnome-settings-daemon-2.0/mouse.gnome-settings-plugin' location='mouse' ** (gnome-settings-daemon:31150): DEBUG: Monitoring dir /apps/gnome_settings_daemon/plugins/mouse for changes ** (gnome-settings-daemon:31150): DEBUG: Loading plugin: /scratch/wbolster/gnome-2-24/lib/gnome-settings-daemon-2.0/xsettings.gnome-settings-plugin ** (gnome-settings-daemon:31150): DEBUG: GnomeSettingsPluginInfo: name='X Settings' file='/scratch/wbolster/gnome-2-24/lib/gnome-settings-daemon-2.0/xsettings.gnome-settings-plugin' location='xsettings' ** (gnome-settings-daemon:31150): DEBUG: Monitoring dir /apps/gnome_settings_daemon/plugins/xsettings for changes ** (gnome-settings-daemon:31150): DEBUG: Loading plugin: /scratch/wbolster/gnome-2-24/lib/gnome-settings-daemon-2.0/xrandr.gnome-settings-plugin ** (gnome-settings-daemon:31150): DEBUG: GnomeSettingsPluginInfo: name='XRandR' file='/scratch/wbolster/gnome-2-24/lib/gnome-settings-daemon-2.0/xrandr.gnome-settings-plugin' location='xrandr' ** (gnome-settings-daemon:31150): DEBUG: Monitoring dir /apps/gnome_settings_daemon/plugins/xrandr for changes ** (gnome-settings-daemon:31150): DEBUG: Loading plugin: /scratch/wbolster/gnome-2-24/lib/gnome-settings-daemon-2.0/keybindings.gnome-settings-plugin ** (gnome-settings-daemon:31150): DEBUG: GnomeSettingsPluginInfo: name='Keybindings' file='/scratch/wbolster/gnome-2-24/lib/gnome-settings-daemon-2.0/keybindings.gnome-settings-plugin' location='keybindings' ** (gnome-settings-daemon:31150): DEBUG: Monitoring dir /apps/gnome_settings_daemon/plugins/keybindings for changes ** (gnome-settings-daemon:31150): DEBUG: Loading plugin: /scratch/wbolster/gnome-2-24/lib/gnome-settings-daemon-2.0/media-keys.gnome-settings-plugin ** (gnome-settings-daemon:31150): DEBUG: GnomeSettingsPluginInfo: name='Media keys' file='/scratch/wbolster/gnome-2-24/lib/gnome-settings-daemon-2.0/media-keys.gnome-settings-plugin' location='media-keys' ** (gnome-settings-daemon:31150): DEBUG: Monitoring dir /apps/gnome_settings_daemon/plugins/media-keys for changes ** (gnome-settings-daemon:31150): DEBUG: Loading plugin: /scratch/wbolster/gnome-2-24/lib/gnome-settings-daemon-2.0/background.gnome-settings-plugin ** (gnome-settings-daemon:31150): DEBUG: GnomeSettingsPluginInfo: name='Background' file='/scratch/wbolster/gnome-2-24/lib/gnome-settings-daemon-2.0/background.gnome-settings-plugin' location='background' ** (gnome-settings-daemon:31150): DEBUG: Monitoring dir /apps/gnome_settings_daemon/plugins/background for changes ** (gnome-settings-daemon:31150): DEBUG: Loading plugin: /scratch/wbolster/gnome-2-24/lib/gnome-settings-daemon-2.0/dummy.gnome-settings-plugin ** (gnome-settings-daemon:31150): DEBUG: GnomeSettingsPluginInfo: name='Dummy' file='/scratch/wbolster/gnome-2-24/lib/gnome-settings-daemon-2.0/dummy.gnome-settings-plugin' location='dummy' ** (gnome-settings-daemon:31150): DEBUG: Monitoring dir /apps/gnome_settings_daemon/plugins/dummy for changes ** (gnome-settings-daemon:31150): DEBUG: GnomeSettingsModule 0x620f20 initialising ** (gnome-settings-daemon:31150): DEBUG: Loading /scratch/wbolster/gnome-2-24/lib/gnome-settings-daemon-2.0/libxrandr.so [New Thread 46912573305088 (LWP 31150)] ** (gnome-settings-daemon:31150): DEBUG: Registering GsdXrandrPlugin ** (gnome-settings-daemon:31150): DEBUG: Creating object of type GsdXrandrPlugin ** (gnome-settings-daemon:31150): DEBUG: GsdXrandrPlugin initializing ** (gnome-settings-daemon:31150): DEBUG: Activating xrandr plugin ** (gnome-settings-daemon:31150): DEBUG: Starting xrandr manager ** (gnome-settings-daemon:31150): DEBUG: GnomeSettingsManager: emitting plugin-activated xrandr ** (gnome-settings-daemon:31150): DEBUG: Plugin xrandr: active ** (gnome-settings-daemon:31150): DEBUG: GnomeSettingsModule 0x620f70 initialising ** (gnome-settings-daemon:31150): DEBUG: Loading /scratch/wbolster/gnome-2-24/lib/gnome-settings-daemon-2.0/libxsettings.so ** (gnome-settings-daemon:31150): DEBUG: Registering GnomeXSettingsPlugin ** (gnome-settings-daemon:31150): DEBUG: Creating object of type GnomeXSettingsPlugin ** (gnome-settings-daemon:31150): DEBUG: GnomeXSettingsPlugin initializing ** (gnome-settings-daemon:31150): DEBUG: Activating xsettings plugin ** (gnome-settings-daemon:31150): DEBUG: Starting xsettings manager ** (gnome-settings-daemon:31150): DEBUG: Setting GTK modules 'gnomebreakpad' [Detaching after fork from child process 31153. (Try `set detach-on-fork off'.)] [New Thread 1084229968 (LWP 31154)] ** (gnome-settings-daemon:31150): DEBUG: GnomeSettingsManager: emitting plugin-activated xsettings ** (gnome-settings-daemon:31150): DEBUG: Plugin xsettings: active ** (gnome-settings-daemon:31150): DEBUG: GnomeSettingsModule 0x6210f0 initialising ** (gnome-settings-daemon:31150): DEBUG: Loading /scratch/wbolster/gnome-2-24/lib/gnome-settings-daemon-2.0/libsound.so ** (gnome-settings-daemon:31150): DEBUG: Registering GsdSoundPlugin ** (gnome-settings-daemon:31150): DEBUG: Creating object of type GsdSoundPlugin ** (gnome-settings-daemon:31150): DEBUG: GsdSoundPlugin initializing ** (gnome-settings-daemon:31150): DEBUG: Activating sound plugin ** (gnome-settings-daemon:31150): DEBUG: Starting sound manager ** (gnome-settings-daemon:31150): DEBUG: GnomeSettingsManager: emitting plugin-activated sound ** (gnome-settings-daemon:31150): DEBUG: Plugin sound: active ** (gnome-settings-daemon:31150): DEBUG: GnomeSettingsModule 0x621140 initialising ** (gnome-settings-daemon:31150): DEBUG: Loading /scratch/wbolster/gnome-2-24/lib/gnome-settings-daemon-2.0/libfont.so ** (gnome-settings-daemon:31150): DEBUG: Registering GsdFontPlugin ** (gnome-settings-daemon:31150): DEBUG: Creating object of type GsdFontPlugin ** (gnome-settings-daemon:31150): DEBUG: GsdFontPlugin initializing ** (gnome-settings-daemon:31150): DEBUG: Activating font plugin ** (gnome-settings-daemon:31150): DEBUG: Starting font manager [Detaching after fork from child process 31155.] [Detaching after fork from child process 31156.]
+ Trace 209728
Thread 46912573305088 (LWP 31150)
Continuing. The program 'gnome-settings-daemon' received an X Window System error. This probably reflects a bug in the program. The error was 'BadClass, invalid event class'. (Details: serial 1781 error_code 175 request_code 151 minor_code 6) (Note to programmers: normally, X errors are reported asynchronously; that is, you will receive the error a while after causing it. To debug your program, run it with the --sync command line option to change this behavior. You can then get a meaningful backtrace from your debugger if you break on the gdk_x_error() function.) [1226571454,000,xklavier.c:xkl_engine_start_listen/] The backend does not require manual layout management - but it is provided by the application Program exited with code 01.
This commit is the culprit: r573 | jensg | 2008-11-01 13:38:30 +0100 (Sat, 01 Nov 2008) | 12 lines 2008-11-01 Jens Granseuer <jensgr@gmx.net> Merged from trunk. Patch by: William Grant <wgrant@ubuntu.com> * plugins/mouse/gsd-mouse-manager.c: (devicepresence_filter), (set_devicepresence_handler), (set_mouse_settings), (gsd_mouse_manager_start), (gsd_mouse_manager_stop): listen for X device changes, and reconfigure the mouse if necessary so that the settings aren't ignored when hotplugging (bug #549267) If I revert to an older revision, it does not crash anymore.
The offending line seems to be a call to XSelectExtensionEvent. The XSelectExtensionEvent(3) manpage states: BadClass A value for an XEventClass argument is invalid.
There's also these compilation warnings: gsd-mouse-manager.c: In function 'devicepresence_filter': gsd-mouse-manager.c:316: warning: nested extern declaration of '_XiGetDevicePresenceNotifyEvent' gsd-mouse-manager.c: In function 'set_devicepresence_handler': gsd-mouse-manager.c:334: warning: nested extern declaration of '_XiGetDevicePresenceNotifyEvent'
Created attachment 122603 [details] [review] trap X errors Does this help? > gsd-mouse-manager.c: In function 'devicepresence_filter': > gsd-mouse-manager.c:316: warning: nested extern declaration of '_XiGetDevicePresenceNotifyEvent' > gsd-mouse-manager.c: In function 'set_devicepresence_handler': > gsd-mouse-manager.c:334: warning: nested extern declaration of '_XiGetDevicePresenceNotifyEvent' Blame X.org.
Yes, that helps. g-s-d no longer crashes.
Created attachment 122641 [details] [review] Improved fix This patch fixes the problem for me. Adding gdk_flush() seems to do the trick.
Hmm. it seems that my previous comment got lost somehow. What I was trying to see that the patch from comment #5 only fixed the crash when running with the --sync option. The patch from comment #7 also works without --sync.
s/see/say is/
Hm, I wonder if we can get away without the traps if we do proper error checking... Can you please try print xi_presence print class_presence right before the XSelectExtensionEvent line?
You mean in GDB? It'll have to wait for a few days, since I don't have physical access to the machine right now, and running g-s-d remotely is kind of pointless in this case :)
Breakpoint 2, 0x000000388c805670 in XSelectExtensionEvent () from /usr/lib64/libXi.so.6 (gdb) bt
+ Trace 210035
$5 = 65536 (gdb) print xi_presence $6 = 110
Ok, committed the version with the flush. 65536 might be an invalid class we could check for but I couldn't find any documentation on that, so better safe than sorry.