From 1e47814fbe11608bb5aa3d3920486ae3e694b6cc Mon Sep 17 00:00:00 2001 From: Oleg Nesterov Date: Thu, 2 Apr 2009 16:58:36 -0700 Subject: [PATCH] --- yaml --- r: 139709 b: refs/heads/master c: 2ae448efc87df6d328f5835969076c7f9fce59c3 h: refs/heads/master i: 139707: 904ee6f07db8888a2bb4ddb1ac64d2b694558899 v: v3 --- [refs] | 2 +- trunk/kernel/exit.c | 2 +- trunk/kernel/pid.c | 2 ++ 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index 2fe0392e6e60..c7cf308e5824 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 6dda81f4384b94930826eded254d8c16f89a9248 +refs/heads/master: 2ae448efc87df6d328f5835969076c7f9fce59c3 diff --git a/trunk/kernel/exit.c b/trunk/kernel/exit.c index 029415d9f82e..384f09caf2ef 100644 --- a/trunk/kernel/exit.c +++ b/trunk/kernel/exit.c @@ -1737,7 +1737,7 @@ SYSCALL_DEFINE4(wait4, pid_t, upid, int __user *, stat_addr, pid = find_get_pid(-upid); } else if (upid == 0) { type = PIDTYPE_PGID; - pid = get_pid(task_pgrp(current)); + pid = get_task_pid(current, PIDTYPE_PGID); } else /* upid > 0 */ { type = PIDTYPE_PID; pid = find_get_pid(upid); diff --git a/trunk/kernel/pid.c b/trunk/kernel/pid.c index 1b3586fe753a..6628abcc520e 100644 --- a/trunk/kernel/pid.c +++ b/trunk/kernel/pid.c @@ -403,6 +403,8 @@ struct pid *get_task_pid(struct task_struct *task, enum pid_type type) { struct pid *pid; rcu_read_lock(); + if (type != PIDTYPE_PID) + task = task->group_leader; pid = get_pid(task->pids[type].pid); rcu_read_unlock(); return pid;