Re: [gdm-list] handled=false xservers broken in 2.20.0 vs. 2.18.1



Michael Pardee wrote:

Nov  2 16:00:30 ubuntu gdm[6774]: DEBUG: gdm_slave_run: Opening display :0
Nov  2 16:00:31 ubuntu gdm[6773]: WARNING: gdm_cleanup_children: child
6774 crashed of signal 11

Yes, this is the GDM slave daemon that is crashing for some reason.
Probably a bug in the code.

I can start the X server just fine with the exact same parameters from
gdm 2.18 or the command line, so I don't think the x server itself is
crashing, unless it has something to do with the way gdm 2.20 is
starting it. What's the best way to try to figure out why the gdm
slave is segfaulting?

Unfortunately, debugging problems like this in often a bit painful.
This is because you can't run the slave process directly.  It has
to be forked by the main process.

There are a few approaches you can try:

1) Does the crashing slave daemon leave behind a core file?  Note
   that you might need to do something like configure coreadm to
   allow programs like GDM to generate core files.  By default,
   many systems are configured so programs like system services
   don't generate core files.  If it were to generate a core file,
   it would probably be in the root (/) directory, or in whatever
   directory you start GDM from by hand.  You might also look
   in /var/lib/gdm, or /var/log/gdm.

   If you can get it to generate a core file, then I'd recommend
   compiling the code with -g (setting CFLAGS="-g" before running
   configure should work).  Then we could get the line number of
   where the crash is happening, which would be helpful.

2) If you compile GDM with debug, then you might be able to attach
   a debugger to the running process.  You might need to introduce
   a sleep before the "Opening display" code of a few seconds to
   give you some time to attach before the failure happens.

3) You can add gdm_debug() statements to the code to try and
   track down where the crash is happening, and to print out
   variables that might be involved with triggering the crash.

   Note in daemon/slave.c 1494 is where we print out "Opening
   display" mesage we see in the log.  Farther down on line
   1597 is where GDM should just pause in the non-handled case;

   1597          if ( ! d->handled) {
   1598                  /* yay, we now wait for the server to die */
   1599                  while (d->servpid > 0) {
   1600                          pause ();
   1601                  }

   There are not any debug messages between lines 1494 and 1597, so
   adding some would probably help to track down what might be going
   wrong.  Perhaps there is some bug that is causing it to fall into
   one of the blocks of code not appropriate for non-handled displays?

Also, looking at the code, I wonder if starting GDM with the
--wait-for-go argument might make a difference?  Might be worth
a try.

Brian


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]