190
emit_ready_idle (GdmServer *server)
189
on_sigusr1 (gpointer user_data)
192
GdmServer *server = user_data;
192
194
g_debug ("GdmServer: Got USR1 from X server - emitting READY");
194
196
g_signal_emit (server, signals[READY], 0);
200
signal_cb (int signo,
204
g_idle_add ((GSourceFunc)emit_ready_idle, server);
210
add_ready_handler (GdmServer *server)
212
GdmSignalHandler *signal_handler;
214
signal_handler = gdm_signal_handler_new ();
215
gdm_signal_handler_add (signal_handler,
217
(GdmSignalHandlerFunc)signal_cb,
219
g_object_unref (signal_handler);
223
remove_ready_handler (GdmServer *server)
225
GdmSignalHandler *signal_handler;
227
signal_handler = gdm_signal_handler_new ();
228
gdm_signal_handler_remove_func (signal_handler,
230
(GdmSignalHandlerFunc)signal_cb,
232
g_object_unref (signal_handler);
235
200
/* We keep a connection (parent_dsp) open with the parent X server
236
201
* before running a proxy on it to prevent the X server resetting
237
202
* as we open and close other connections.
717
680
if (argv[0] == NULL) {
718
g_warning (_("%s: Empty server command for display %s"),
720
server->priv->display_name);
681
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
682
_("%s: Empty server command for display %s"),
684
server->priv->display_name);
727
691
g_debug ("GdmServer: Starting X server process: %s", freeme);
731
ret = g_spawn_async_with_pipes (NULL,
734
G_SPAWN_SEARCH_PATH | G_SPAWN_DO_NOT_REAP_CHILD,
735
(GSpawnChildSetupFunc)server_child_setup,
744
g_warning ("Could not start command '%s': %s",
745
server->priv->command,
747
g_error_free (error);
694
if (!g_spawn_async_with_pipes (NULL,
697
G_SPAWN_SEARCH_PATH | G_SPAWN_DO_NOT_REAP_CHILD,
698
(GSpawnChildSetupFunc)server_child_setup,
707
g_debug ("GdmServer: Started X server process %d - waiting for READY", (int)server->priv->pid);
709
server->priv->child_watch_id = g_child_watch_add (server->priv->pid,
710
(GChildWatchFunc)server_child_watch,
750
715
g_strfreev (argv);
751
g_ptr_array_foreach (env, (GFunc)g_free, NULL);
752
g_ptr_array_free (env, TRUE);
755
g_debug ("GdmServer: Started X server process %d - waiting for READY", (int)server->priv->pid);
757
server->priv->child_watch_id = g_child_watch_add (server->priv->pid,
758
(GChildWatchFunc)server_child_watch,
717
g_ptr_array_foreach (env, (GFunc)g_free, NULL);
718
g_ptr_array_free (env, TRUE);
774
731
gdm_server_start (GdmServer *server)
733
gboolean res = FALSE;
777
734
const char *vtarg = NULL;
735
GError *local_error = NULL;
736
GError **error = &local_error;
779
738
/* Hardcode the VT for the initial X server, but nothing else */
780
739
if (server->priv->is_initial) {
793
752
/* fork X server process */
794
res = gdm_server_spawn (server, vtarg);
753
if (!gdm_server_spawn (server, vtarg, error)) {
760
g_printerr ("%s\n", local_error->message);
761
g_clear_error (&local_error);
1091
1060
g_return_if_fail (server->priv != NULL);
1093
remove_ready_handler (server);
1062
if (server->priv->sigusr1_id > 0)
1063
g_source_remove (server->priv->sigusr1_id);
1095
1065
gdm_server_stop (server);