diff -ur daemon.orig/gdm-server.c daemon/gdm-server.c
--- daemon.orig/gdm-server.c 2015-04-02 06:52:39.000000000 -0700
+++ daemon/gdm-server.c 2015-05-04 12:11:56.000000000 -0700
return g_strdup (server->priv->display_device);
-gdm_server_ready (GdmServer *server)
- g_debug ("GdmServer: Got USR1 from X server - emitting READY");
- gdm_run_script (GDMCONFDIR "/Init", GDM_USERNAME,
- server->priv->display_name,
- server->priv->auth_file);
- g_signal_emit (server, signals[READY], 0);
-static GSList *active_servers;
-static gboolean sigusr1_thread_running;
-static GCond sigusr1_thread_cond;
-static GMutex sigusr1_thread_mutex;
-got_sigusr1 (gpointer user_data)
+on_sigusr1(gpointer user_data)
- GPid pid = GPOINTER_TO_UINT (user_data);
- g_debug ("GdmServer: got SIGUSR1 from PID %d", pid);
- for (l = active_servers; l; l = l->next) {
- GdmServer *server = l->data;
- if (server->priv->pid == pid)
- gdm_server_ready (server);
- return G_SOURCE_REMOVE;
-sigusr1_thread_main (gpointer user_data)
- /* Handle only SIGUSR1 */
- sigemptyset (&sigusr1_mask);
- sigaddset (&sigusr1_mask, SIGUSR1);
- sigprocmask (SIG_SETMASK, &sigusr1_mask, NULL);
- g_mutex_lock (&sigusr1_thread_mutex);
- sigusr1_thread_running = TRUE;
- g_cond_signal (&sigusr1_thread_cond);
- g_mutex_unlock (&sigusr1_thread_mutex);
- /* Spin waiting for a SIGUSR1 */
- if (sigwaitinfo (&sigusr1_mask, &info) == -1)
+ GdmServer *server = user_data;
- g_idle_add (got_sigusr1, GUINT_TO_POINTER (info.si_pid));
-gdm_server_launch_sigusr1_thread_if_needed (void)
- static GThread *sigusr1_thread;
- if (sigusr1_thread == NULL) {
- sigusr1_thread = g_thread_new ("gdm SIGUSR1 catcher", sigusr1_thread_main, NULL);
+ g_debug ("GdmServer: Got USR1 from X server - emitting READY");
- g_mutex_lock (&sigusr1_thread_mutex);