[Bug 48936] Re: GDM: Greeter application crashing
Jonathan Harker
jon at jon.geek.nz
Thu Feb 8 03:19:35 UTC 2007
I took the liberty of enabling debug in gdm.conf and relevant bits of
log files are attached.
Meanwhile, my C isn't up to an awful lot, much less gtk glib and so on.
However, looking in the source I can see that the greeter failing error
message is only in one place, from a condition in the
gdm_slave_greeter() function in slave.c
daemon/slave.c:2611:
if G_UNLIKELY (d->try_different_greeter) {
/* ... call gdm_error_box with the failure message ... */
Following that, d->try_different_greeter is only set in the
gdm_cleanup_children() function in gdm.c when the exit status is
DISPLAY_GREETERFAILED (defined as 65 in gdm.h line 76), in this block:
daemon/gdm.c:847:
if (status == DISPLAY_GREETERFAILED) {
if (d->managetime + 10 >= time (NULL)) {
d->try_different_greeter = TRUE;
} else {
d->try_different_greeter = FALSE;
}
/* now just remanage */
status = DISPLAY_REMANAGE;
} else {
d->try_different_greeter = FALSE;
}
It looks like it is giving up after 10 seconds, so perhaps it is a
timing thing? Anyway, I grepped for things that exit with a
DISPLAY_GREETERFAILED code and found these:
daemon/slave.c:4692: exit_code_to_use = DISPLAY_GREETERFAILED;
daemon/slave.c:4698: exit_code_to_use = DISPLAY_GREETERFAILED;
gui/gdmcommon.c:94: _exit (DISPLAY_GREETERFAILED);
gui/gdmcommon.c:109: _exit (DISPLAY_GREETERFAILED);
The daemon/slave.c calls are in the gdm_slave_child_handler() function
at line 4621 which handles SIGCHLD signals.
The gui/gdmcommon.c references are in the gdm_common_fail_greeter()
function, which looks like it tries to log, clean up and exit with
DISPLAY_GREETERFAILED. It is called from gui/greeter/greeter.c (and
gui/gdmlogin.c, but we're not concerned with that since it is the fall-
back greeter, which works).
In gui/greeter/greeter.c, gdm_common_fail_greeter() is called from int
main() at line and the process_operation() function contains a
switch(op_code), and the default case calls it at line 451.
gui/greeter/greeter.c:451: gdm_common_fail_greeter ("Unexpected greeter command received: '%c'", op_code);
gui/greeter/greeter.c:1089: gdm_common_fail_greeter ("%s: Error setting up %s signal handler: %s", "main",
gui/greeter/greeter.c:1099: gdm_common_fail_greeter ("%s: Error setting up %s signal handler: %s", "main",
gui/greeter/greeter.c:1104: gdm_common_fail_greeter ("%s: Error setting up %s signal handler: %s", "main",
gui/greeter/greeter.c:1114: gdm_common_fail_greeter ("Could not set signal mask!");
gui/greeter/greeter.c:1122: gdm_common_fail_greeter ("Could not set signal mask!");
So it seems to boil down to gui/greeter/greeter.c and scrutinising what
int main() is doing, or else I wonder if there is some op_code that
isn't being processed by the process_operation() function?
** Attachment added: "/var/log/daemon.log"
http://librarian.launchpad.net/6346313/part-of-daemon.log.txt
--
GDM: Greeter application crashing
https://launchpad.net/bugs/48936
More information about the desktop-bugs
mailing list