summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHalton Huo <halton.huo@sun.com>2009-11-27 18:05:56 +0800
committerHalton Huo <halton.huo@sun.com>2009-11-27 18:05:56 +0800
commita720673cc6dff0677213f21b6e3c8cf2e760379d (patch)
tree28047b42271e40f6231930fc18872e980cceb098
parentfb54b86f5582355a90189f866cc16b243620ab1a (diff)
downloadgdm-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.c21
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);