summaryrefslogtreecommitdiff
path: root/daemon/gdm-session-worker-job.c
diff options
context:
space:
mode:
Diffstat (limited to 'daemon/gdm-session-worker-job.c')
-rw-r--r--daemon/gdm-session-worker-job.c30
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;
}