diff options
author | Halton Huo <halton.huo@sun.com> | 2009-11-27 18:05:56 +0800 |
---|---|---|
committer | Halton Huo <halton.huo@sun.com> | 2009-11-27 18:05:56 +0800 |
commit | a720673cc6dff0677213f21b6e3c8cf2e760379d (patch) | |
tree | 28047b42271e40f6231930fc18872e980cceb098 | |
parent | fb54b86f5582355a90189f866cc16b243620ab1a (diff) | |
download | gdm-a720673cc6dff0677213f21b6e3c8cf2e760379d.tar.gz |
Wait X socket release before spawn it.
Sometimes quit X slowly, adding this to avoid restart
http://defect.opensolaris.org/bz/show_bug.cgi?id=12795
-rw-r--r-- | daemon/gdm-server.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/daemon/gdm-server.c b/daemon/gdm-server.c index 42682738..6408d042 100644 --- a/daemon/gdm-server.c +++ b/daemon/gdm-server.c @@ -602,6 +602,7 @@ gdm_server_spawn (GdmServer *server, GPtrArray *env; gboolean ret; char *freeme; + char *tmp; ret = FALSE; @@ -624,6 +625,26 @@ gdm_server_spawn (GdmServer *server, _exit (SERVER_ABORT); } + /* Sometimes quit X slowly, adding this to avoid restart session + failure */ + if ((tmp = strstr (server->priv->display_name, ":")) != NULL) { + char *socket_file; + int display_num; + char *p; + + tmp++; + display_num = g_ascii_strtod (tmp, &p); + + socket_file = g_strdup_printf ("/tmp/.X11-unix/X%d", + display_num); + while (1) { + if (!g_file_test (socket_file, G_FILE_TEST_EXISTS)) + break; + sleep (1); + } + g_free (socket_file); + } + env = get_server_environment (server); freeme = g_strjoinv (" ", argv); |