}
static void
-signal_cb (int signum)
+indicate_ready (void)
{
- if (signum == SIGHUP)
+ void *handler;
+ handler = signal (SIGUSR1, SIG_IGN);
+ if (handler == SIG_IGN)
{
- status_notify ("XSERVER-%d DISCONNECT-CLIENTS", display_number);
- }
- else
- {
- status_notify ("XSERVER-%d TERMINATE SIGNAL=%d", display_number, signum);
- quit (EXIT_SUCCESS);
+ status_notify ("XSERVER-%d INDICATE-READY", display_number);
+ kill (getppid (), SIGUSR1);
}
- indicate_ready ();
+ signal (SIGUSR1, handler);
+}
+
+static gboolean
+sighup_cb (gpointer user_data)
+{
+ status_notify ("XSERVER-%d DISCONNECT-CLIENTS", display_number);
+ return TRUE;
+}
+
+static gboolean
+sigint_cb (gpointer user_data)
+{
+ status_notify ("XSERVER-%d TERMINATE SIGNAL=%d", display_number, SIGINT);
+ quit (EXIT_SUCCESS);
+ return TRUE;
+}
+
+static gboolean
+sigterm_cb (gpointer user_data)
+{
+ status_notify ("XSERVER-%d TERMINATE SIGNAL=%d", display_number, SIGTERM);
+ quit (EXIT_SUCCESS);
+ return TRUE;
}
static void
exit (status);
}
-static void
-signal_cb (int signum)
+static gboolean
+sighup_cb (gpointer user_data)
{
- if (signum == SIGHUP)
- {
- status_notify ("XSERVER-%d DISCONNECT-CLIENTS", display_number);
- }
- else
- {
- status_notify ("XSERVER-%d TERMINATE SIGNAL=%d", display_number, signum);
- quit (EXIT_SUCCESS);
- }
+ status_notify ("XSERVER-%d DISCONNECT-CLIENTS", display_number);
- indicate_ready ();
+ return TRUE;
+}
+
+static gboolean
+sigint_cb (gpointer user_data)
+{
+ status_notify ("XSERVER-%d TERMINATE SIGNAL=%d", display_number, SIGINT);
+ quit (EXIT_SUCCESS);
+ return TRUE;
+}
+
+static gboolean
+sigterm_cb (gpointer user_data)
+{
+ status_notify ("XSERVER-%d TERMINATE SIGNAL=%d", display_number, SIGTERM);
+ quit (EXIT_SUCCESS);
+ return TRUE;
}
static void