Module Name: src
Committed By: rmind
Date: Wed Nov 4 21:23:03 UTC 2009
Modified Files:
src/sys/compat/common: kern_exit_43.c kern_time_50.c
src/sys/compat/ibcs2: ibcs2_misc.c
src/sys/compat/irix: irix_signal.c
src/sys/compat/linux/common: linux_misc.c
src/sys/compat/linux32/common: linux32_wait.c
src/sys/compat/netbsd32: netbsd32_compat_50.c netbsd32_wait.c
src/sys/compat/osf1: osf1_misc.c
src/sys/compat/svr4: svr4_misc.c
src/sys/compat/svr4_32: svr4_32_misc.c
src/sys/kern: kern_exit.c
src/sys/sys: proc.h
Log Message:
do_sys_wait(): fix previous by checking for ru != NULL. Noticed by
Onno van der Linden. Also, remove redundant arguments (seems that
was_zombie was not used since rev 1.177 ?).
To generate a diff of this commit:
cvs rdiff -u -r1.21 -r1.22 src/sys/compat/common/kern_exit_43.c
cvs rdiff -u -r1.10 -r1.11 src/sys/compat/common/kern_time_50.c
cvs rdiff -u -r1.108 -r1.109 src/sys/compat/ibcs2/ibcs2_misc.c
cvs rdiff -u -r1.50 -r1.51 src/sys/compat/irix/irix_signal.c
cvs rdiff -u -r1.209 -r1.210 src/sys/compat/linux/common/linux_misc.c
cvs rdiff -u -r1.10 -r1.11 src/sys/compat/linux32/common/linux32_wait.c
cvs rdiff -u -r1.5 -r1.6 src/sys/compat/netbsd32/netbsd32_compat_50.c
cvs rdiff -u -r1.20 -r1.21 src/sys/compat/netbsd32/netbsd32_wait.c
cvs rdiff -u -r1.82 -r1.83 src/sys/compat/osf1/osf1_misc.c
cvs rdiff -u -r1.146 -r1.147 src/sys/compat/svr4/svr4_misc.c
cvs rdiff -u -r1.65 -r1.66 src/sys/compat/svr4_32/svr4_32_misc.c
cvs rdiff -u -r1.224 -r1.225 src/sys/kern/kern_exit.c
cvs rdiff -u -r1.292 -r1.293 src/sys/sys/proc.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/compat/common/kern_exit_43.c
diff -u src/sys/compat/common/kern_exit_43.c:1.21 src/sys/compat/common/kern_exit_43.c:1.22
--- src/sys/compat/common/kern_exit_43.c:1.21 Thu Dec 20 23:02:44 2007
+++ src/sys/compat/common/kern_exit_43.c Wed Nov 4 21:23:02 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: kern_exit_43.c,v 1.21 2007/12/20 23:02:44 dsl Exp $ */
+/* $NetBSD: kern_exit_43.c,v 1.22 2009/11/04 21:23:02 rmind Exp $ */
/*
* Copyright (c) 1982, 1986, 1989, 1991, 1993
@@ -37,7 +37,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kern_exit_43.c,v 1.21 2007/12/20 23:02:44 dsl Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kern_exit_43.c,v 1.22 2009/11/04 21:23:02 rmind Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -74,24 +74,17 @@
int
compat_43_sys_wait(struct lwp *l, const void *v, register_t *retval)
{
- int error, status, was_zombie;
- int child_pid = WAIT_ANY;
-
-
-#ifdef PSL_ALLCC
-#else
-#endif
+ int error, status, child_pid = WAIT_ANY;
#ifdef PSL_ALLCC
if ((GETPS(l->l_md.md_regs) & PSL_ALLCC) != PSL_ALLCC) {
- error = do_sys_wait(l, &child_pid, &status, 0, NULL, &was_zombie);
+ error = do_sys_wait(&child_pid, &status, 0, NULL);
} else {
- error = do_sys_wait(l, &child_pid, &status,
- l->l_md.md_regs[R0], (struct rusage *)l->l_md.md_regs[R1],
- &was_zombie);
+ error = do_sys_wait(&child_pid, &status,
+ l->l_md.md_regs[R0], (struct rusage *)l->l_md.md_regs[R1]);
}
#else
- error = do_sys_wait(l, &child_pid, &status, 0, NULL, &was_zombie);
+ error = do_sys_wait(&child_pid, &status, 0, NULL);
#endif
retval[0] = child_pid;
retval[1] = status;
Index: src/sys/compat/common/kern_time_50.c
diff -u src/sys/compat/common/kern_time_50.c:1.10 src/sys/compat/common/kern_time_50.c:1.11
--- src/sys/compat/common/kern_time_50.c:1.10 Mon Oct 12 23:41:51 2009
+++ src/sys/compat/common/kern_time_50.c Wed Nov 4 21:23:02 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: kern_time_50.c,v 1.10 2009/10/12 23:41:51 yamt Exp $ */
+/* $NetBSD: kern_time_50.c,v 1.11 2009/11/04 21:23:02 rmind Exp $ */
/*-
* Copyright (c) 2008, 2009 The NetBSD Foundation, Inc.
@@ -29,7 +29,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kern_time_50.c,v 1.10 2009/10/12 23:41:51 yamt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kern_time_50.c,v 1.11 2009/11/04 21:23:02 rmind Exp $");
#ifdef _KERNEL_OPT
#include "opt_aio.h"
@@ -823,7 +823,8 @@
return (error);
}
int
-compat_50_sys_wait4(struct lwp *l, const struct compat_50_sys_wait4_args *uap, register_t *retval)
+compat_50_sys_wait4(struct lwp *l, const struct compat_50_sys_wait4_args *uap,
+ register_t *retval)
{
/* {
syscallarg(int) pid;
@@ -831,14 +832,12 @@
syscallarg(int) options;
syscallarg(struct rusage50 *) rusage;
} */
- int status, error;
- int was_zombie;
- struct rusage ru;
- struct rusage50 ru50;
- int pid = SCARG(uap, pid);
+ int status, error, pid = SCARG(uap, pid);
+ struct rusage50 ru50;
+ struct rusage ru;
- error = do_sys_wait(l, &pid, &status, SCARG(uap, options),
- SCARG(uap, rusage) != NULL ? &ru : NULL, &was_zombie);
+ error = do_sys_wait(&pid, &status, SCARG(uap, options),
+ SCARG(uap, rusage) != NULL ? &ru : NULL);
retval[0] = pid;
if (pid == 0)
Index: src/sys/compat/ibcs2/ibcs2_misc.c
diff -u src/sys/compat/ibcs2/ibcs2_misc.c:1.108 src/sys/compat/ibcs2/ibcs2_misc.c:1.109
--- src/sys/compat/ibcs2/ibcs2_misc.c:1.108 Sun Aug 9 22:49:00 2009
+++ src/sys/compat/ibcs2/ibcs2_misc.c Wed Nov 4 21:23:02 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: ibcs2_misc.c,v 1.108 2009/08/09 22:49:00 haad Exp $ */
+/* $NetBSD: ibcs2_misc.c,v 1.109 2009/11/04 21:23:02 rmind Exp $ */
/*
* Copyright (c) 1992, 1993
@@ -95,7 +95,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ibcs2_misc.c,v 1.108 2009/08/09 22:49:00 haad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ibcs2_misc.c,v 1.109 2009/11/04 21:23:02 rmind Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -215,8 +215,7 @@
syscallarg(int) a3;
} */
#endif
- int error;
- int pid, options, status, was_zombie;
+ int error, options, status, pid;
#if defined(__i386__)
#define WAITPID_EFLAGS 0x8c4 /* OF, SF, ZF, PF */
@@ -233,7 +232,7 @@
}
#endif
- error = do_sys_wait(l, &pid, &status, options, NULL, &was_zombie);
+ error = do_sys_wait(&pid, &status, options, NULL);
retval[0] = pid;
retval[1] = status;
return error;
Index: src/sys/compat/irix/irix_signal.c
diff -u src/sys/compat/irix/irix_signal.c:1.50 src/sys/compat/irix/irix_signal.c:1.51
--- src/sys/compat/irix/irix_signal.c:1.50 Wed Mar 18 16:00:16 2009
+++ src/sys/compat/irix/irix_signal.c Wed Nov 4 21:23:02 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: irix_signal.c,v 1.50 2009/03/18 16:00:16 cegger Exp $ */
+/* $NetBSD: irix_signal.c,v 1.51 2009/11/04 21:23:02 rmind Exp $ */
/*-
* Copyright (c) 1994, 2001-2002 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: irix_signal.c,v 1.50 2009/03/18 16:00:16 cegger Exp $");
+__KERNEL_RCSID(0, "$NetBSD: irix_signal.c,v 1.51 2009/11/04 21:23:02 rmind Exp $");
#include <sys/types.h>
#include <sys/signal.h>
@@ -800,7 +800,8 @@
* from svr4_misc.c, or push the irix_irix5_siginfo into svr4_siginfo.h
*/
int
-irix_sys_waitsys(struct lwp *l, const struct irix_sys_waitsys_args *uap, register_t *retval)
+irix_sys_waitsys(struct lwp *l, const struct irix_sys_waitsys_args *uap,
+ register_t *retval)
{
/* {
syscallarg(int) type;
@@ -810,13 +811,12 @@
syscallarg(struct rusage *) ru;
} */
struct proc *parent = l->l_proc;
- int options, status, error;
- int was_zombie;
+ int error, status, options, pid;
struct rusage ru;
- int pid = SCARG(uap, pid);
switch (SCARG(uap, type)) {
case SVR4_P_PID:
+ pid = SCARG(uap, pid);
break;
case SVR4_P_PGID:
@@ -848,14 +848,12 @@
if (SCARG(uap, options) & (SVR4_WSTOPPED|SVR4_WCONTINUED))
options |= WUNTRACED;
- error = do_sys_wait(l, &pid, &status, options, &ru, &was_zombie);
-
+ error = do_sys_wait(&pid, &status, options, &ru);
if (error != 0)
return error;
- if (was_zombie) {
- if (SCARG(uap, ru))
- error = copyout(&ru, SCARG(uap, ru), sizeof(ru));
+ if (SCARG(uap, ru)) {
+ error = copyout(&ru, SCARG(uap, ru), sizeof(ru));
if (error != 0)
return error;
}
Index: src/sys/compat/linux/common/linux_misc.c
diff -u src/sys/compat/linux/common/linux_misc.c:1.209 src/sys/compat/linux/common/linux_misc.c:1.210
--- src/sys/compat/linux/common/linux_misc.c:1.209 Wed Jul 22 15:49:29 2009
+++ src/sys/compat/linux/common/linux_misc.c Wed Nov 4 21:23:02 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: linux_misc.c,v 1.209 2009/07/22 15:49:29 njoly Exp $ */
+/* $NetBSD: linux_misc.c,v 1.210 2009/11/04 21:23:02 rmind Exp $ */
/*-
* Copyright (c) 1995, 1998, 1999, 2008 The NetBSD Foundation, Inc.
@@ -57,7 +57,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: linux_misc.c,v 1.209 2009/07/22 15:49:29 njoly Exp $");
+__KERNEL_RCSID(0, "$NetBSD: linux_misc.c,v 1.210 2009/11/04 21:23:02 rmind Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -219,10 +219,9 @@
syscallarg(int) options;
syscallarg(struct rusage50 *) rusage;
} */
- int error, status, options, linux_options, was_zombie;
- struct rusage ru;
+ int error, status, options, linux_options, pid = SCARG(uap, pid);
struct rusage50 ru50;
- int pid = SCARG(uap, pid);
+ struct rusage ru;
proc_t *p;
linux_options = SCARG(uap, options);
@@ -246,17 +245,17 @@
# endif
- error = do_sys_wait(l, &pid, &status, options,
- SCARG(uap, rusage) != NULL ? &ru : NULL, &was_zombie);
+ error = do_sys_wait(&pid, &status, options,
+ SCARG(uap, rusage) != NULL ? &ru : NULL);
retval[0] = pid;
if (pid == 0)
return error;
- p = curproc;
- mutex_enter(p->p_lock);
+ p = curproc;
+ mutex_enter(p->p_lock);
sigdelset(&p->p_sigpend.sp_set, SIGCHLD); /* XXXAD ksiginfo leak */
- mutex_exit(p->p_lock);
+ mutex_exit(p->p_lock);
if (SCARG(uap, rusage) != NULL) {
rusage_to_rusage50(&ru, &ru50);
Index: src/sys/compat/linux32/common/linux32_wait.c
diff -u src/sys/compat/linux32/common/linux32_wait.c:1.10 src/sys/compat/linux32/common/linux32_wait.c:1.11
--- src/sys/compat/linux32/common/linux32_wait.c:1.10 Sat Jan 17 22:28:53 2009
+++ src/sys/compat/linux32/common/linux32_wait.c Wed Nov 4 21:23:03 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: linux32_wait.c,v 1.10 2009/01/17 22:28:53 njoly Exp $ */
+/* $NetBSD: linux32_wait.c,v 1.11 2009/11/04 21:23:03 rmind Exp $ */
/*-
* Copyright (c) 2006 Emmanuel Dreyfus, all rights reserved.
@@ -33,7 +33,7 @@
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: linux32_wait.c,v 1.10 2009/01/17 22:28:53 njoly Exp $");
+__KERNEL_RCSID(0, "$NetBSD: linux32_wait.c,v 1.11 2009/11/04 21:23:03 rmind Exp $");
#include <sys/types.h>
#include <sys/param.h>
@@ -99,11 +99,10 @@
syscallarg(int) options;
syscallarg(netbsd32_rusage50p_t) rusage;
} */
- int error, status, linux_options, options, was_zombie;
- struct rusage ru;
+ int error, status, linux_options, options, pid;
struct netbsd32_rusage50 ru32;
+ struct rusage ru;
proc_t *p;
- int pid;
linux_options = SCARG(uap, options);
options = WOPTSCHECKED;
@@ -120,8 +119,8 @@
options |= WALTSIG;
pid = SCARG(uap, pid);
- error = do_sys_wait(l, &pid, &status, options,
- SCARG_P32(uap, rusage) != NULL ? &ru : NULL, &was_zombie);
+ error = do_sys_wait(&pid, &status, options,
+ SCARG_P32(uap, rusage) != NULL ? &ru : NULL);
retval[0] = pid;
if (pid == 0)
return error;
Index: src/sys/compat/netbsd32/netbsd32_compat_50.c
diff -u src/sys/compat/netbsd32/netbsd32_compat_50.c:1.5 src/sys/compat/netbsd32/netbsd32_compat_50.c:1.6
--- src/sys/compat/netbsd32/netbsd32_compat_50.c:1.5 Sun Aug 9 22:49:01 2009
+++ src/sys/compat/netbsd32/netbsd32_compat_50.c Wed Nov 4 21:23:03 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: netbsd32_compat_50.c,v 1.5 2009/08/09 22:49:01 haad Exp $ */
+/* $NetBSD: netbsd32_compat_50.c,v 1.6 2009/11/04 21:23:03 rmind Exp $ */
/*-
* Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -36,7 +36,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: netbsd32_compat_50.c,v 1.5 2009/08/09 22:49:01 haad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: netbsd32_compat_50.c,v 1.6 2009/11/04 21:23:03 rmind Exp $");
#if defined(_KERNEL_OPT)
#include "opt_sysv.h"
@@ -857,14 +857,12 @@
syscallarg(int) options;
syscallarg(netbsd32_rusage50p_t) rusage;
} */
- int status, error;
- int was_zombie;
- struct rusage ru;
- struct netbsd32_rusage50 ru32;
- int pid = SCARG(uap, pid);
+ int error, status, pid = SCARG(uap, pid);
+ struct netbsd32_rusage50 ru32;
+ struct rusage ru;
- error = do_sys_wait(l, &pid, &status, SCARG(uap, options),
- SCARG_P32(uap, rusage) != NULL ? &ru : NULL, &was_zombie);
+ error = do_sys_wait(&pid, &status, SCARG(uap, options),
+ SCARG_P32(uap, rusage) != NULL ? &ru : NULL);
retval[0] = pid;
if (pid == 0)
Index: src/sys/compat/netbsd32/netbsd32_wait.c
diff -u src/sys/compat/netbsd32/netbsd32_wait.c:1.20 src/sys/compat/netbsd32/netbsd32_wait.c:1.21
--- src/sys/compat/netbsd32/netbsd32_wait.c:1.20 Sun Jan 11 02:45:49 2009
+++ src/sys/compat/netbsd32/netbsd32_wait.c Wed Nov 4 21:23:03 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: netbsd32_wait.c,v 1.20 2009/01/11 02:45:49 christos Exp $ */
+/* $NetBSD: netbsd32_wait.c,v 1.21 2009/11/04 21:23:03 rmind Exp $ */
/*
* Copyright (c) 1998, 2001 Matthew R. Green
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: netbsd32_wait.c,v 1.20 2009/01/11 02:45:49 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: netbsd32_wait.c,v 1.21 2009/11/04 21:23:03 rmind Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -55,14 +55,12 @@
syscallarg(int) options;
syscallarg(netbsd32_rusagep_t) rusage;
} */
- int status, error;
- int was_zombie;
- struct rusage ru;
- struct netbsd32_rusage ru32;
- int pid = SCARG(uap, pid);
+ int error, status, pid = SCARG(uap, pid);
+ struct netbsd32_rusage ru32;
+ struct rusage ru;
- error = do_sys_wait(l, &pid, &status, SCARG(uap, options),
- SCARG_P32(uap, rusage) != NULL ? &ru : NULL, &was_zombie);
+ error = do_sys_wait(&pid, &status, SCARG(uap, options),
+ SCARG_P32(uap, rusage) != NULL ? &ru : NULL);
retval[0] = pid;
if (pid == 0)
Index: src/sys/compat/osf1/osf1_misc.c
diff -u src/sys/compat/osf1/osf1_misc.c:1.82 src/sys/compat/osf1/osf1_misc.c:1.83
--- src/sys/compat/osf1/osf1_misc.c:1.82 Tue Apr 22 21:29:21 2008
+++ src/sys/compat/osf1/osf1_misc.c Wed Nov 4 21:23:03 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: osf1_misc.c,v 1.82 2008/04/22 21:29:21 ad Exp $ */
+/* $NetBSD: osf1_misc.c,v 1.83 2009/11/04 21:23:03 rmind Exp $ */
/*
* Copyright (c) 1999 Christopher G. Demetriou. All rights reserved.
@@ -58,7 +58,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: osf1_misc.c,v 1.82 2008/04/22 21:29:21 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: osf1_misc.c,v 1.83 2009/11/04 21:23:03 rmind Exp $");
#if defined(_KERNEL_OPT)
#include "opt_syscall_debug.h"
@@ -402,7 +402,7 @@
struct osf1_rusage osf1_rusage;
struct rusage netbsd_rusage;
unsigned long leftovers;
- int error, status, was_zombie;
+ int error, status;
int options = SCARG(uap, options);
int pid = SCARG(uap, pid);
@@ -412,8 +412,8 @@
if (leftovers != 0)
return (EINVAL);
- error = do_sys_wait(l, & pid, &status, options | WOPTSCHECKED,
- SCARG(uap, rusage) != NULL ? &netbsd_rusage : NULL, &was_zombie);
+ error = do_sys_wait(&pid, &status, options | WOPTSCHECKED,
+ SCARG(uap, rusage) != NULL ? &netbsd_rusage : NULL);
retval[0] = pid;
if (pid == 0)
Index: src/sys/compat/svr4/svr4_misc.c
diff -u src/sys/compat/svr4/svr4_misc.c:1.146 src/sys/compat/svr4/svr4_misc.c:1.147
--- src/sys/compat/svr4/svr4_misc.c:1.146 Sun Aug 9 22:49:01 2009
+++ src/sys/compat/svr4/svr4_misc.c Wed Nov 4 21:23:03 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: svr4_misc.c,v 1.146 2009/08/09 22:49:01 haad Exp $ */
+/* $NetBSD: svr4_misc.c,v 1.147 2009/11/04 21:23:03 rmind Exp $ */
/*-
* Copyright (c) 1994, 2008 The NetBSD Foundation, Inc.
@@ -37,7 +37,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: svr4_misc.c,v 1.146 2009/08/09 22:49:01 haad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: svr4_misc.c,v 1.147 2009/11/04 21:23:03 rmind Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -109,13 +109,12 @@
svr4_mode_t, svr4_dev_t);
int
-svr4_sys_wait(struct lwp *l, const struct svr4_sys_wait_args *uap, register_t *retval)
+svr4_sys_wait(struct lwp *l, const struct svr4_sys_wait_args *uap,
+ register_t *retval)
{
- int error, was_zombie;
- int st, sig;
- int pid = WAIT_ANY;
+ int error, st, sig, pid = WAIT_ANY;
- error = do_sys_wait(l, &pid, &st, 0, NULL, &was_zombie);
+ error = do_sys_wait(&pid, &st, 0, NULL);
retval[0] = pid;
if (pid == 0)
Index: src/sys/compat/svr4_32/svr4_32_misc.c
diff -u src/sys/compat/svr4_32/svr4_32_misc.c:1.65 src/sys/compat/svr4_32/svr4_32_misc.c:1.66
--- src/sys/compat/svr4_32/svr4_32_misc.c:1.65 Mon Aug 10 17:36:00 2009
+++ src/sys/compat/svr4_32/svr4_32_misc.c Wed Nov 4 21:23:03 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: svr4_32_misc.c,v 1.65 2009/08/10 17:36:00 rjs Exp $ */
+/* $NetBSD: svr4_32_misc.c,v 1.66 2009/11/04 21:23:03 rmind Exp $ */
/*-
* Copyright (c) 1994, 2008 The NetBSD Foundation, Inc.
@@ -37,7 +37,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: svr4_32_misc.c,v 1.65 2009/08/10 17:36:00 rjs Exp $");
+__KERNEL_RCSID(0, "$NetBSD: svr4_32_misc.c,v 1.66 2009/11/04 21:23:03 rmind Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -107,13 +107,12 @@
svr4_32_mode_t, svr4_32_dev_t);
int
-svr4_32_sys_wait(struct lwp *l, const struct svr4_32_sys_wait_args *uap, register_t *retval)
+svr4_32_sys_wait(struct lwp *l, const struct svr4_32_sys_wait_args *uap,
+ register_t *retval)
{
- int error, was_zombie;
- int pid = WAIT_ANY;
- int st, sig;
+ int error, st, sig, pid = WAIT_ANY;
- error = do_sys_wait(l, &pid, &st, 0, NULL, &was_zombie);
+ error = do_sys_wait(&pid, &st, 0, NULL);
retval[0] = pid;
if (pid == 0)
Index: src/sys/kern/kern_exit.c
diff -u src/sys/kern/kern_exit.c:1.224 src/sys/kern/kern_exit.c:1.225
--- src/sys/kern/kern_exit.c:1.224 Sun Nov 1 21:05:30 2009
+++ src/sys/kern/kern_exit.c Wed Nov 4 21:23:02 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: kern_exit.c,v 1.224 2009/11/01 21:05:30 rmind Exp $ */
+/* $NetBSD: kern_exit.c,v 1.225 2009/11/04 21:23:02 rmind Exp $ */
/*-
* Copyright (c) 1998, 1999, 2006, 2007, 2008 The NetBSD Foundation, Inc.
@@ -67,7 +67,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kern_exit.c,v 1.224 2009/11/01 21:05:30 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kern_exit.c,v 1.225 2009/11/04 21:23:02 rmind Exp $");
#include "opt_ktrace.h"
#include "opt_perfctrs.h"
@@ -665,46 +665,41 @@
}
int
-do_sys_wait(struct lwp *l, int *pid, int *status, int options,
- struct rusage *ru, int *was_zombie)
+do_sys_wait(int *pid, int *status, int options, struct rusage *ru)
{
- struct proc *child;
- int error;
+ proc_t *child;
+ int error;
+ if (ru != NULL) {
+ memset(ru, 0, sizeof(*ru));
+ }
mutex_enter(proc_lock);
- error = find_stopped_child(l->l_proc, *pid, options, &child, status);
-
+ error = find_stopped_child(curproc, *pid, options, &child, status);
if (child == NULL) {
mutex_exit(proc_lock);
*pid = 0;
return error;
}
-
*pid = child->p_pid;
if (child->p_stat == SZOMB) {
/* proc_free() will release the proc_lock. */
if (options & WNOWAIT) {
mutex_exit(proc_lock);
- memset(ru, 0, sizeof(*ru));
} else {
proc_free(child, ru);
}
- *was_zombie = 1;
} else {
/* Child state must have been SSTOP. */
mutex_exit(proc_lock);
-
- *was_zombie = 0;
*status = W_STOPCODE(*status);
- memset(ru, 0, sizeof(*ru));
}
-
return 0;
}
int
-sys___wait450(struct lwp *l, const struct sys___wait450_args *uap, register_t *retval)
+sys___wait450(struct lwp *l, const struct sys___wait450_args *uap,
+ register_t *retval)
{
/* {
syscallarg(int) pid;
@@ -712,24 +707,22 @@
syscallarg(int) options;
syscallarg(struct rusage *) rusage;
} */
- int status, error;
- int was_zombie;
- struct rusage ru;
- int pid = SCARG(uap, pid);
+ int error, status, pid = SCARG(uap, pid);
+ struct rusage ru;
- error = do_sys_wait(l, &pid, &status, SCARG(uap, options),
- SCARG(uap, rusage) != NULL ? &ru : NULL, &was_zombie);
+ error = do_sys_wait(&pid, &status, SCARG(uap, options),
+ SCARG(uap, rusage) != NULL ? &ru : NULL);
retval[0] = pid;
- if (pid == 0)
+ if (pid == 0) {
return error;
-
- if (SCARG(uap, rusage))
- error = copyout(&ru, SCARG(uap, rusage), sizeof(ru));
-
- if (error == 0 && SCARG(uap, status))
+ }
+ if (SCARG(uap, status)) {
error = copyout(&status, SCARG(uap, status), sizeof(status));
-
+ }
+ if (SCARG(uap, rusage) && error == 0) {
+ error = copyout(&ru, SCARG(uap, rusage), sizeof(ru));
+ }
return error;
}
Index: src/sys/sys/proc.h
diff -u src/sys/sys/proc.h:1.292 src/sys/sys/proc.h:1.293
--- src/sys/sys/proc.h:1.292 Thu Oct 22 22:28:57 2009
+++ src/sys/sys/proc.h Wed Nov 4 21:23:02 2009
@@ -1,4 +1,4 @@
-/* $NetBSD: proc.h,v 1.292 2009/10/22 22:28:57 rmind Exp $ */
+/* $NetBSD: proc.h,v 1.293 2009/11/04 21:23:02 rmind Exp $ */
/*-
* Copyright (c) 2006, 2007, 2008 The NetBSD Foundation, Inc.
@@ -484,7 +484,7 @@
void wakeup_one(wchan_t);
int kpause(const char *, bool, int, kmutex_t *);
void exit1(struct lwp *, int) __dead;
-int do_sys_wait(struct lwp *, int *, int *, int, struct rusage *, int *);
+int do_sys_wait(int *, int *, int, struct rusage *);
struct proc *proc_alloc(void);
void proc0_init(void);
void proc_free_pid(struct proc *);