summaryrefslogtreecommitdiff
path: root/daemon/gdm-session-worker-job.c
diff options
context:
space:
mode:
authorWilliam Jon McCann <jmccann@redhat.com>2008-03-17 23:49:00 +0000
committerWilliam Jon McCann <mccann@src.gnome.org>2008-03-17 23:49:00 +0000
commitca1214f327095f3c080dcf79bee9e4b506d51479 (patch)
tree552acda2c50baf4d51f8f8ea88c46eed27000fdd /daemon/gdm-session-worker-job.c
parent227edb3aa624b302e69eeb5c33c43c18d450292c (diff)
downloadgdm-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.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;
}