summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSean Davis <smd.seandavis@gmail.com>2015-05-17 23:25:42 -0400
committerSean Davis <smd.seandavis@gmail.com>2015-05-17 23:25:42 -0400
commita2fa1044a4708f8619b78c3e8b607a2b692b4c61 (patch)
treeb1fc198eee0fdb501c8cef0745ba0b65ce9f38ae
parent1c1b3f2cccdd1d9e5012c42a82c86a4121b191f2 (diff)
parentc28d7371966c5b57d3f8ad43b3d2482e1bd75d0b (diff)
downloadlightdm-gtk-greeter-git-a2fa1044a4708f8619b78c3e8b607a2b692b4c61.tar.gz
Merge lp:~lightdm-gtk-greeter-team/lightdm-gtk-greeter/lp-1445461-leave-instance into lp:lightdm-gtk-greeter
-rw-r--r--configure.ac13
-rw-r--r--src/lightdm-gtk-greeter.c31
2 files changed, 38 insertions, 6 deletions
diff --git a/configure.ac b/configure.ac
index 9eed4aa..bebdb00 100644
--- a/configure.ac
+++ b/configure.ac
@@ -132,6 +132,19 @@ AS_IF([test "x$enable_indicator_services_command" != "xno"],
])
dnl ###########################################################################
+
+AC_ARG_ENABLE([kill-on-sigterm],
+ AC_HELP_STRING([--enable-kill-on-sigterm], [Kill greeter instance on SIGTERM, see LP1445461])
+ AC_HELP_STRING([--disable-kill-on-sigterm], [Don't kill greeter on SIGTERM, see LP1445461']),
+ [], [enable_kill_on_sigterm=no])
+
+AS_IF([test "x$enable_kill_on_sigterm" = "xyes"],
+[
+ AC_DEFINE([KILL_ON_SIGTERM], [1], [Kill greeter in SIGTERM handler, see LP1445461])
+],
+[])
+
+dnl ###########################################################################
dnl Internationalization
dnl ###########################################################################
diff --git a/src/lightdm-gtk-greeter.c b/src/lightdm-gtk-greeter.c
index 9b2e6c6..1518abc 100644
--- a/src/lightdm-gtk-greeter.c
+++ b/src/lightdm-gtk-greeter.c
@@ -429,10 +429,27 @@ close_pid (GPid pid, gboolean remove)
static void
sigterm_cb (gpointer user_data)
{
- g_slist_foreach (pids_to_close, (GFunc)close_pid, GINT_TO_POINTER (FALSE));
- g_slist_free (pids_to_close);
- pids_to_close = NULL;
- gtk_main_quit ();
+ gboolean is_callback = GPOINTER_TO_INT (user_data);
+
+ if (is_callback)
+ g_debug ("SIGTERM received");
+
+ if (pids_to_close)
+ {
+ g_slist_foreach (pids_to_close, (GFunc)close_pid, GINT_TO_POINTER (FALSE));
+ g_slist_free (pids_to_close);
+ pids_to_close = NULL;
+ }
+
+ if (is_callback)
+ {
+ gtk_main_quit ();
+ #ifdef KILL_ON_SIGTERM
+ /* LP: #1445461 */
+ g_debug ("Killing greeter with exit()...");
+ exit (EXIT_SUCCESS);
+ #endif
+ }
}
/* Power window */
@@ -2605,7 +2622,7 @@ main (int argc, char **argv)
bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
textdomain (GETTEXT_PACKAGE);
- g_unix_signal_add (SIGTERM, (GSourceFunc)sigterm_cb, NULL);
+ g_unix_signal_add (SIGTERM, (GSourceFunc)sigterm_cb, /* is_callback */ GINT_TO_POINTER (TRUE));
config_init ();
@@ -3116,9 +3133,11 @@ main (int argc, char **argv)
gtk_widget_show (GTK_WIDGET (screen_overlay));
+ g_debug ("Run Gtk loop...");
gtk_main ();
+ g_debug ("Gtk loop exits");
- g_slist_foreach (pids_to_close, (GFunc)close_pid, NULL);
+ sigterm_cb (/* is_callback */ GINT_TO_POINTER (FALSE));
return EXIT_SUCCESS;
}