sometimes sighup needed for gnome-shell

Adam Jackson ajax at
Mon Nov 21 15:26:52 UTC 2011

On Mon, 2011-11-21 at 12:11 +0100, Gianluca Cecchi wrote:
> On Fri, Nov 18, 2011 at 7:00 PM, Adam Jackson  wrote:
> > If you debuginfo-install gnome-shell, attach with gdb instead of sending
> > SIGHUP, and run 'thread apply all backtrace', what do you get?
> As MJ whould have said... This is it ... ;-)

The interesting part seems to be:

Thread 1 (Thread 0x7fbf4aa8c9c0 (LWP 1609)):
#0  0x0000003cb7ee6443 in __GI___poll (fds=<optimized out>,
nfds=<optimized out>, timeout=<optimized out>)
at ../sysdeps/unix/sysv/linux/poll.c:87
#1  0x0000003cbc208ba2 in ?? () from /usr/lib64/
#2  0x0000003cbc2090ff in ?? () from /usr/lib64/
#3  0x0000003cbc209184 in xcb_writev () from /usr/lib64/
#4  0x0000003cbc6456e7 in _XSend (dpy=0xb47a30, data=<optimized out>,
size=<optimized out>) at xcb_io.c:436
#5  0x0000003cbc639d55 in SendZImage (dest_scanline_pad=0,
dest_bits_per_pixel=32, req_yoffset=<optimized out>, req_xoffset=0,
    req=<optimized out>, dpy=0xb47a30) at PutImage.c:802

This is showing gnome-shell trying to write an image to the X server,
but blocking because the socket to the X server does not appear to be
ready for writing.

So there's (at least) three things that could be going wrong here, from
probably most to least likely:

1) the write queue to the X server really might be blocked
2) libxcb could have a logic bug that's getting stuck here
3) the kernel might have a bug in poll()

#1 typically only happens in two cases: either the X server is stuck
away from the dispatch loop, or it's explicitly ignoring you because
there's a grab in process.  In the former case SIGHUP wouldn't help,
simply reloading the shell won't un-stick the X server.  But in the
latter case, it might; if the grab is from one of the shell's other
threads, then closing all of the shell's display connections would reset
the grab.

So my next intuition would be to gdb the X server and see what's up.  If
you find it waiting patiently on a call to select(), then the second
case is more likely, and 'print AllClients' should show you an fd_set
with only one bit set.

- ajax
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: This is a digitally signed message part
Url : 

More information about the test mailing list