diff options
author | William Jon McCann <jmccann@redhat.com> | 2008-03-17 23:49:00 +0000 |
---|---|---|
committer | William Jon McCann <mccann@src.gnome.org> | 2008-03-17 23:49:00 +0000 |
commit | ca1214f327095f3c080dcf79bee9e4b506d51479 (patch) | |
tree | 552acda2c50baf4d51f8f8ea88c46eed27000fdd /daemon/gdm-session-worker-job.c | |
parent | 227edb3aa624b302e69eeb5c33c43c18d450292c (diff) | |
download | gdm-ca1214f327095f3c080dcf79bee9e4b506d51479.tar.gz |
Move wait_on_child to common. Always check return value of gdm_signal_pid.
2008-03-17 William Jon McCann <jmccann@redhat.com>
* common/gdm-common.c: (gdm_wait_on_pid), (gdm_signal_pid),
(_read_bytes), (gdm_generate_random_bytes):
* common/gdm-common.h:
* common/gdm-settings-desktop-backend.c: (parse_key_string),
(gdm_settings_desktop_backend_get_value),
(gdm_settings_desktop_backend_finalize):
* common/gdm-settings-utils.c: (gdm_settings_parse_schemas):
* daemon/gdm-server.c: (server_died), (gdm_server_stop):
* daemon/gdm-session-worker-job.c: (session_worker_job_died),
(gdm_session_worker_job_stop):
* daemon/gdm-slave-proxy.c: (child_watch), (kill_slave),
(gdm_slave_proxy_stop), (gdm_slave_proxy_dispose),
(gdm_slave_proxy_finalize):
* daemon/gdm-welcome-session.c: (stop_dbus_daemon),
(welcome_session_died), (gdm_welcome_session_stop):
* daemon/main.c: (main):
* gui/simple-greeter/gdm-remote-login-window.c: (xserver_died):
* gui/simple-greeter/gdm-session-client.c: (client_died),
(gdm_session_client_stop):
Move wait_on_child to common. Always check return value of
gdm_signal_pid. Fix a number of small leaks. Make sure
to signal the slaves when exiting.
svn path=/trunk/; revision=6036
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; } |