Blob Blame History Raw
From a9d3724eb048862af7f89f037f37582df118abfd Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
Date: Thu, 29 Aug 2019 09:34:04 -0400
Subject: [PATCH] session-worker: don't kill progress group until PostSession
 is run

Killing the process group leads to the worker getting killed, so
the PostSession never gets run.

This commit fixes that, by deferring killing the process group
until after PostSession has run.
---
 daemon/gdm-session-worker.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/daemon/gdm-session-worker.c b/daemon/gdm-session-worker.c
index 0e8541589..9bdee361f 100644
--- a/daemon/gdm-session-worker.c
+++ b/daemon/gdm-session-worker.c
@@ -1793,65 +1793,65 @@ run_script (GdmSessionWorker *worker,
         }
 
         return gdm_run_script (dir,
                                worker->priv->username,
                                worker->priv->x11_display_name,
                                worker->priv->display_is_local? NULL : worker->priv->hostname,
                                worker->priv->x11_authority_file);
 }
 
 static void
 session_worker_child_watch (GPid              pid,
                             int               status,
                             GdmSessionWorker *worker)
 {
         g_debug ("GdmSessionWorker: child (pid:%d) done (%s:%d)",
                  (int) pid,
                  WIFEXITED (status) ? "status"
                  : WIFSIGNALED (status) ? "signal"
                  : "unknown",
                  WIFEXITED (status) ? WEXITSTATUS (status)
                  : WIFSIGNALED (status) ? WTERMSIG (status)
                  : -1);
 
 
         gdm_session_worker_uninitialize_pam (worker, PAM_SUCCESS);
 
         gdm_dbus_worker_emit_session_exited (GDM_DBUS_WORKER (worker),
                                              worker->priv->service,
                                              status);
 
-        killpg (pid, SIGHUP);
-
         worker->priv->child_pid = -1;
         worker->priv->child_watch_id = 0;
         run_script (worker, GDMCONFDIR "/PostSession");
+
+        killpg (pid, SIGHUP);
 }
 
 static void
 gdm_session_worker_watch_child (GdmSessionWorker *worker)
 {
         g_debug ("GdmSession worker: watching pid %d", worker->priv->child_pid);
         worker->priv->child_watch_id = g_child_watch_add (worker->priv->child_pid,
                                                           (GChildWatchFunc)session_worker_child_watch,
                                                           worker);
 
 }
 
 static gboolean
 _is_loggable_file (const char* filename)
 {
         struct stat file_info;
 
         if (g_lstat (filename, &file_info) < 0) {
                 return FALSE;
         }
 
         return S_ISREG (file_info.st_mode) && g_access (filename, R_OK | W_OK) == 0;
 }
 
 static void
 rotate_logs (const char *path,
              guint       n_copies)
 {
         int i;
 
-- 
2.21.0