diff options
Diffstat (limited to 'daemon/gdm-session-worker-job.c')
-rw-r--r-- | daemon/gdm-session-worker-job.c | 30 |
1 files changed, 8 insertions, 22 deletions
diff --git a/daemon/gdm-session-worker-job.c b/daemon/gdm-session-worker-job.c index d3243608..01d8b35a 100644 --- a/daemon/gdm-session-worker-job.c +++ b/daemon/gdm-session-worker-job.c @@ -222,32 +222,13 @@ gdm_session_worker_job_start (GdmSessionWorkerJob *session_worker_job) return res; } -static int -wait_on_child (int pid) -{ - int status; - - wait_again: - if (waitpid (pid, &status, 0) < 0) { - if (errno == EINTR) { - goto wait_again; - } else if (errno == ECHILD) { - ; /* do nothing, child already reaped */ - } else { - g_debug ("GdmSessionWorkerJob: waitpid () should not fail"); - } - } - - return status; -} - static void session_worker_job_died (GdmSessionWorkerJob *session_worker_job) { int exit_status; g_debug ("GdmSessionWorkerJob: Waiting on process %d", session_worker_job->priv->pid); - exit_status = wait_on_child (session_worker_job->priv->pid); + exit_status = gdm_wait_on_pid (session_worker_job->priv->pid); if (WIFEXITED (exit_status) && (WEXITSTATUS (exit_status) != 0)) { g_debug ("GdmSessionWorkerJob: Wait on child process failed"); @@ -264,6 +245,7 @@ session_worker_job_died (GdmSessionWorkerJob *session_worker_job) gboolean gdm_session_worker_job_stop (GdmSessionWorkerJob *session_worker_job) { + int res; if (session_worker_job->priv->pid <= 1) { return TRUE; @@ -277,8 +259,12 @@ gdm_session_worker_job_stop (GdmSessionWorkerJob *session_worker_job) g_debug ("GdmSessionWorkerJob: Stopping job pid:%d", session_worker_job->priv->pid); - gdm_signal_pid (session_worker_job->priv->pid, SIGTERM); - session_worker_job_died (session_worker_job); + res = gdm_signal_pid (session_worker_job->priv->pid, SIGTERM); + if (res < 0) { + g_warning ("Unable to kill session worker process"); + } else { + session_worker_job_died (session_worker_job); + } return TRUE; } |