xserver restarting with certain usb events

Adam Jackson ajax at redhat.com
Wed Dec 7 19:02:48 UTC 2011


On 12/7/11 12:20 PM, Clyde E. Kunkel wrote:
> On 12/06/2011 12:35 PM, Adam Jackson wrote:
>> On 12/6/11 11:27 AM, Clyde E. Kunkel wrote:
>>
>>> [ 428.783] Server terminated successfully (0). Closing log file.
>>
>> This message is there for a reason. It means the X server is terminating
>> "normally", ie, because the session has gone away.
>>
>> Check in ~/.xsession-errors for relevant messages, or in dmesg for
>> segfaults.
>
> bunch of gnomes segfaulting causing X server to restart?  Why would usb
> events cause these problems?

USB device plug -> new X input device -> apps query for new device 
capabilities -> something goes wrong -> bang.

> [  471.632799] gnome-settings-[2048]: segfault at 60 ip 00000037e9e1eb39
> sp 00007fff41d46320 error 4 in libgdk-3.so.0.304.0[37e9e00000+82000]
> [  471.633389] nm-applet[2195]: segfault at 60 ip 00000037e9e1eb39 sp
> 00007fffeabda1f0 error 4 in libgdk-3.so.0.304.0[37e9e00000+82000]
> [  471.633464] nautilus[2108]: segfault at 60 ip 00000037e9e1eb39 sp
> 00007fff99ae75c0 error 4 in libgdk-3.so.0.304.0[37e9e00000+82000]

Notice that the bit in [] at the end is always the same, as well as the 
faulting ip address.  Given when you said "current rawhide", you're 
probably running gtk3-3.3.4-1.fc17, in which case:

% echo 0x1eb39 | eu-addr2line -e 
usr/lib/debug/usr/lib64/libgdk-3.so.0.304.0.debug
/usr/src/debug/gtk+-3.3.4/gdk/gdkdevice.c:1325

(Magic number 0x1eb39 derived from the number after 'ip' minus the 
similar-looking number inside the square brackets; one's the instruction 
pointer, one's the base address of all code.)

So what's there?

% cat -n usr/src/debug/gtk+-3.3.4/gdk/gdkdevice.c | grep -A10 1320
   1320	void
   1321	_gdk_device_reset_axes (GdkDevice *device)
   1322	{
   1323	  gint i;
   1324	
   1325	  for (i = device->axes->len - 1; i >= 0; i--)
   1326	    g_array_remove_index (device->axes, i);
   1327	
   1328	  g_object_notify (G_OBJECT (device), "n-axes");
   1329	}
   1330	

So either device->axes or device is NULL.  Would be trivial to paper 
over by just checking for that (I think), but it's probable that some 
invariant is being violated if we can ever get to that point.

- ajax


More information about the test mailing list