diff options
Diffstat (limited to 'gnome-base/gdm/files/gdm-fix-daemonize-regression.patch')
-rw-r--r-- | gnome-base/gdm/files/gdm-fix-daemonize-regression.patch | 114 |
1 files changed, 0 insertions, 114 deletions
diff --git a/gnome-base/gdm/files/gdm-fix-daemonize-regression.patch b/gnome-base/gdm/files/gdm-fix-daemonize-regression.patch deleted file mode 100644 index 698993c..0000000 --- a/gnome-base/gdm/files/gdm-fix-daemonize-regression.patch +++ /dev/null @@ -1,114 +0,0 @@ -diff -Naur gdm.orig/daemon/main.c gdm.trunk/daemon/main.c ---- gdm.orig/daemon/main.c 2008-08-15 22:43:36.000000000 +0530 -+++ gdm.trunk/daemon/main.c 2008-10-24 21:25:19.000000000 +0530 -@@ -495,6 +495,63 @@ - return ret; - } - -+static void -+gdm_signal_ignore (int signal) -+{ -+ struct sigaction ign_signal; -+ -+ ign_signal.sa_handler = SIG_IGN; -+ ign_signal.sa_flags = SA_RESTART; -+ sigemptyset (&ign_signal.sa_mask); -+ -+ if G_UNLIKELY (sigaction (signal, &ign_signal, NULL) < 0) -+ gdm_error (_("%s: Error setting signal %d to %s"), -+ "gdm_signal_ignore", signal, "SIG_IGN"); -+} -+ -+static void -+gdm_open_dev_null (mode_t mode) -+{ -+ int ret; -+ VE_IGNORE_EINTR (ret = open ("/dev/null", mode)); -+ if G_UNLIKELY (ret < 0) { -+ /* -+ * Never output anything, we're likely in some -+ * strange state right now -+ */ -+ gdm_signal_ignore (SIGPIPE); -+ VE_IGNORE_EINTR (close (2)); -+ gdm_fail ("Cannot open /dev/null!"); -+ } -+} -+ -+static void -+gdm_daemonify (void) -+{ -+ pid_t pid; -+ -+ pid = fork (); -+ -+ /* terminate the parent */ -+ if (pid > 0) -+ exit (EXIT_SUCCESS); -+ -+ if G_UNLIKELY (pid < 0) -+ gdm_fail (_("%s: fork () failed!"), "gdm_daemonify"); -+ -+ if G_UNLIKELY (setsid () < 0) -+ gdm_fail (_("%s: setsid () failed: %s!"), "gdm_daemonify", -+ strerror (errno)); -+ -+ /* reopen stdin, stdout, stderr with /dev/null */ -+ VE_IGNORE_EINTR (close (0)); -+ VE_IGNORE_EINTR (close (1)); -+ VE_IGNORE_EINTR (close (2)); -+ gdm_open_dev_null (O_RDONLY); -+ gdm_open_dev_null (O_RDWR); -+ gdm_open_dev_null (O_RDWR); -+} -+ - int - main (int argc, - char **argv) -@@ -505,6 +562,7 @@ - DBusGConnection *connection; - GError *error; - int ret; -+ int i; - gboolean res; - gboolean xdmcp_enabled; - GdmSignalHandler *signal_handler; -@@ -512,9 +570,11 @@ - static gboolean do_timed_exit = FALSE; - static gboolean print_version = FALSE; - static gboolean fatal_warnings = FALSE; -+ static gboolean no_daemon = FALSE; - static GOptionEntry entries [] = { - { "debug", 0, 0, G_OPTION_ARG_NONE, &debug, N_("Enable debugging code"), NULL }, - { "fatal-warnings", 0, 0, G_OPTION_ARG_NONE, &fatal_warnings, N_("Make all warnings fatal"), NULL }, -+ { "nodaemon", 0, 0, G_OPTION_ARG_NONE, &no_daemon, N_("Do not fork into the background"), NULL }, - { "timed-exit", 0, 0, G_OPTION_ARG_NONE, &do_timed_exit, N_("Exit after a time - for debugging"), NULL }, - { "version", 0, 0, G_OPTION_ARG_NONE, &print_version, N_("Print GDM version"), NULL }, - -@@ -531,6 +591,14 @@ - - g_type_init (); - -+ /* preprocess the arguments to support the xdm style -nodaemon -+ * option -+ */ -+ for (i = 0; i < argc; i++) { -+ if (strcmp (argv[i], "-nodaemon") == 0) -+ argv[i] = "--nodaemon"; -+ } -+ - context = g_option_context_new (_("GNOME Display Manager")); - g_option_context_add_main_entries (context, entries, NULL); - g_option_context_set_ignore_unknown_options (context, TRUE); -@@ -596,6 +664,11 @@ - exit (-1); - } - -+ if (!no_daemon) { -+ /* fork */ -+ gdm_daemonify (); -+ } -+ - /* pid file */ - delete_pid (); - write_pid (); |