[gdm] Make gdm-session-worker exit cleanly
- From: Ray Strode <halfline src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gdm] Make gdm-session-worker exit cleanly
- Date: Tue, 14 Jul 2015 21:00:22 +0000 (UTC)
commit 187180220ff6179419a2333c0cb1d57818f28854
Author: João Paulo Rechi Vita <jprvita endlessm com>
Date: Fri Jul 10 12:52:04 2015 -0400
Make gdm-session-worker exit cleanly
Calling gdm_session_stop_conversation() in gdm_launch_environment_stop()
sends a SIGTERM to gdm-session-worker without waiting for it to die. The
next step is calling gdm_session_close() to close the session, which
stops all conversations of that session object, sending a 2nd SIGTERM to
gdm-session-worker, this time waiting on its PID.
On gdm-session-worker side, the first SIGTERM is caught by
on_shutdown_signal(), its custom SIGTERM handler, which quits the
mainloop and unrefs the worker object. Quiting the mainloop replaces the
custom SIGTERM handler with the system default one (exit immediately).
During the worker object class finalization gdm-session-worker may
receive the 2nd SIGTERM, which leads to its immediate termination,
without waiting for its children, which in turn leads to the main gdm
process exit.
Since systemd relies on the SIGCHLD from the main gdm process to tell
when the service has stopped, this behavior breaks any unit that has a
Conflicts=gdm.service entry and relies on the X server not being around
when it is started.
This commit removes the call to gdm_session_stop_conversation() in
gdm_launch_environment_stop() and leaves it to be stopped in
gdm_session_close().
[endlessm/eos-shell#4921]
https://bugzilla.gnome.org/show_bug.cgi?id=752388
daemon/gdm-launch-environment.c | 1 -
1 files changed, 0 insertions(+), 1 deletions(-)
---
diff --git a/daemon/gdm-launch-environment.c b/daemon/gdm-launch-environment.c
index ec29d90..1beceea 100644
--- a/daemon/gdm-launch-environment.c
+++ b/daemon/gdm-launch-environment.c
@@ -422,7 +422,6 @@ gdm_launch_environment_stop (GdmLaunchEnvironment *launch_environment)
}
if (launch_environment->priv->session != NULL) {
- gdm_session_stop_conversation (launch_environment->priv->session, "gdm-launch-environment");
gdm_session_close (launch_environment->priv->session);
g_clear_object (&launch_environment->priv->session);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]