summaryrefslogtreecommitdiff
path: root/tests/src/X.c
diff options
context:
space:
mode:
authorRobert Ancell <robert.ancell@canonical.com>2013-07-20 21:49:48 +1200
committerRobert Ancell <robert.ancell@canonical.com>2013-07-20 21:49:48 +1200
commit2d2a06437782dde92611c3c4a005c071ce26b048 (patch)
tree7cae2a6aa5af6d4e6b5a8ae934cca99b3ae0de9e /tests/src/X.c
parentc18cba82f484a4f40a12e4635ac377dd76aa7643 (diff)
downloadlightdm-2d2a06437782dde92611c3c4a005c071ce26b048.tar.gz
Synchronise X server starting
Diffstat (limited to 'tests/src/X.c')
-rw-r--r--tests/src/X.c33
1 files changed, 14 insertions, 19 deletions
diff --git a/tests/src/X.c b/tests/src/X.c
index 66574238..34d373c4 100644
--- a/tests/src/X.c
+++ b/tests/src/X.c
@@ -59,25 +59,11 @@ quit (int status)
}
static void
-indicate_ready (void)
-{
- void *handler;
- handler = signal (SIGUSR1, SIG_IGN);
- if (handler == SIG_IGN)
- {
- status_notify ("XSERVER-%d INDICATE-READY", display_number);
- kill (getppid (), SIGUSR1);
- }
- signal (SIGUSR1, handler);
-}
-
-static void
signal_cb (int signum)
{
if (signum == SIGHUP)
{
status_notify ("XSERVER-%d DISCONNECT-CLIENTS", display_number);
- indicate_ready ();
}
else
{
@@ -166,8 +152,6 @@ static void
client_disconnected_cb (XServer *server, XClient *client)
{
g_signal_handlers_disconnect_matched (client, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, NULL);
- if (x_server_get_n_clients (server) == 0)
- indicate_ready ();
}
static void
@@ -188,6 +172,20 @@ request_cb (const gchar *request)
kill (getpid (), SIGSEGV);
}
g_free (r);
+ r = g_strdup_printf ("XSERVER-%d INDICATE-READY", display_number);
+ if (strcmp (request, r) == 0)
+ {
+ void *handler;
+
+ handler = signal (SIGUSR1, SIG_IGN);
+ if (handler == SIG_IGN)
+ {
+ status_notify ("XSERVER-%d INDICATE-READY", display_number);
+ kill (getppid (), SIGUSR1);
+ }
+ signal (SIGUSR1, handler);
+ }
+ g_free (r);
}
int
@@ -402,9 +400,6 @@ main (int argc, char **argv)
quit (EXIT_FAILURE);
}
- /* Indicate ready if parent process has requested it */
- indicate_ready ();
-
g_main_loop_run (loop);
cleanup ();