summaryrefslogtreecommitdiff
path: root/gnome-base/gdm/files/gdm-3.6.0-fix-daemonize-regression.patch
diff options
context:
space:
mode:
Diffstat (limited to 'gnome-base/gdm/files/gdm-3.6.0-fix-daemonize-regression.patch')
-rw-r--r--gnome-base/gdm/files/gdm-3.6.0-fix-daemonize-regression.patch192
1 files changed, 0 insertions, 192 deletions
diff --git a/gnome-base/gdm/files/gdm-3.6.0-fix-daemonize-regression.patch b/gnome-base/gdm/files/gdm-3.6.0-fix-daemonize-regression.patch
deleted file mode 100644
index 27f20797..00000000
--- a/gnome-base/gdm/files/gdm-3.6.0-fix-daemonize-regression.patch
+++ /dev/null
@@ -1,192 +0,0 @@
-From 722d31dc8823090b651b103f0194b6380f2d458e Mon Sep 17 00:00:00 2001
-From: Alexandre Rostovtsev <tetromino@gentoo.org>
-Date: Tue, 25 Sep 2012 22:30:29 -0400
-Subject: [PATCH] daemonize so that the boot process can continue
-
-Gentoo bug: #236701
-
-Based on original patch by Dan Nicholson <dbn.lists@gmail.com> and
-Gilles Dartiguelongue <eva@gentoo.org>.
-
-Fork gdm-binary, except when -nodaemon is used
-
-Makes the gdm main binary fork and daemonize unless the -nodaemon or
---nodaemon options are used. Provides compatibility with xdm. Fixes
-bug #550170.
-
-In daemonized mode, start a new process group, and kill it in our signal
-handlers, so that killing gdm kills its spawned processes, and so that
-"/etc/init.d/xdm stop" actually works.
----
- configure.ac | 4 ++++
- daemon/Makefile.am | 1 +
- daemon/main.c | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
- 3 files changed, 65 insertions(+)
-
-diff --git a/configure.ac b/configure.ac
-index 61a43d6..a851ba5 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -99,6 +99,10 @@ PKG_CHECK_MODULES(DAEMON,
- AC_SUBST(DAEMON_CFLAGS)
- AC_SUBST(DAEMON_LIBS)
-
-+PKG_CHECK_MODULES(LIBDAEMON, libdaemon)
-+AC_SUBST(LIBDAEMON_CFLAGS)
-+AC_SUBST(LIBDAEMON_LIBS)
-+
- GLIB_GSETTINGS
-
- PKG_CHECK_MODULES(NSS,
-diff --git a/daemon/Makefile.am b/daemon/Makefile.am
-index bb84765..cf89b47 100644
---- a/daemon/Makefile.am
-+++ b/daemon/Makefile.am
-@@ -380,6 +380,7 @@ gdm_binary_LDADD = \
- $(top_builddir)/common/libgdmcommon.la \
- $(XLIB_LIBS) \
- $(DAEMON_LIBS) \
-+ $(LIBDAEMON_LIBS) \
- $(XDMCP_LIBS) \
- $(LIBWRAP_LIBS) \
- $(SYSTEMD_LIBS) \
-diff --git a/daemon/main.c b/daemon/main.c
-index 3b8572c..c2fe4fe 100644
---- a/daemon/main.c
-+++ b/daemon/main.c
-@@ -34,6 +34,8 @@
- #include <locale.h>
- #include <signal.h>
-
-+#include <libdaemon/dfork.h>
-+
- #include <glib.h>
- #include <glib/gi18n.h>
- #include <glib/gstdio.h>
-@@ -336,16 +338,26 @@ signal_cb (int signo,
- gpointer data)
- {
- int ret;
-+ static gboolean ignore_signals = FALSE;
-
- g_debug ("Got callback for signal %d", signo);
-
- ret = TRUE;
-
-+ /* don't commit suicide before killing everyone in our process group */
-+ if (ignore_signals)
-+ return ret;
-+
- switch (signo) {
- case SIGFPE:
- case SIGPIPE:
- /* let the fatal signals interrupt us */
- g_debug ("Caught signal %d, shutting down abnormally.", signo);
-+ /* if we daemonized, kill all the processes we spawned */
-+ ignore_signals = TRUE;
-+ kill (-getpid (), signo);
-+ ignore_signals = FALSE;
-+
- ret = FALSE;
-
- break;
-@@ -354,6 +366,11 @@ signal_cb (int signo,
- case SIGTERM:
- /* let the fatal signals interrupt us */
- g_debug ("Caught signal %d, shutting down normally.", signo);
-+ /* if we daemonized, kill all the processes we spawned */
-+ ignore_signals = TRUE;
-+ kill (-getpid (), signo);
-+ ignore_signals = FALSE;
-+
- ret = FALSE;
-
- break;
-@@ -418,13 +435,16 @@ main (int argc,
- GOptionContext *context;
- GError *error;
- int ret;
-+ int i;
- gboolean res;
- GdmSignalHandler *signal_handler;
- static gboolean do_timed_exit = FALSE;
- static gboolean print_version = FALSE;
- static gboolean fatal_warnings = FALSE;
-+ static gboolean no_daemon = FALSE;
- static GOptionEntry entries [] = {
- { "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 },
-
-@@ -439,6 +459,14 @@ main (int argc,
-
- 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);
-@@ -465,6 +493,33 @@ main (int argc,
- g_log_set_always_fatal (fatal_mask);
- }
-
-+ if (!no_daemon) {
-+ pid_t pid;
-+ if (daemon_retval_init () < 0) {
-+ g_warning ("Failed to create pipe");
-+ exit (-1);
-+ }
-+ if ((pid = daemon_fork ()) < 0) {
-+ /* Fork failed */
-+ daemon_retval_done ();
-+ exit (1);
-+ } else if (pid) {
-+ /* Parent process: wait 20s for daemon_retval_send() in the daemon process */
-+ if ((ret = daemon_retval_wait (20)) < 0) {
-+ g_warning ("Timed out waiting for daemon process: %s", strerror(errno));
-+ exit (255);
-+ } else if (ret > 0) {
-+ g_warning ("Daemon process returned error code %d", ret);
-+ exit (ret);
-+ }
-+ exit (0);
-+ }
-+ /* Daemon process */
-+ daemon_close_all (-1);
-+ /* Start a new process group so that killing the daemon will kill the processes that it spawned */
-+ setsid ();
-+ }
-+
- gdm_log_init ();
-
- settings = gdm_settings_new ();
-@@ -519,6 +574,9 @@ main (int argc,
- g_timeout_add_seconds (30, (GSourceFunc) timed_exit_cb, main_loop);
- }
-
-+ if (!no_daemon)
-+ daemon_retval_send (0);
-+
- g_main_loop_run (main_loop);
-
- g_debug ("GDM finished, cleaning up...");
-@@ -535,6 +593,8 @@ main (int argc,
- ret = 0;
-
- out:
-+ if (!no_daemon)
-+ daemon_retval_send (ret);
-
- return ret;
- }
---
-1.7.12
-