summaryrefslogtreecommitdiffstats
path: root/sys/kern/kern_fork.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/kern/kern_fork.c')
-rw-r--r--sys/kern/kern_fork.c17
1 files changed, 10 insertions, 7 deletions
diff --git a/sys/kern/kern_fork.c b/sys/kern/kern_fork.c
index 01393fee290..e3db4cdc4d5 100644
--- a/sys/kern/kern_fork.c
+++ b/sys/kern/kern_fork.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: kern_fork.c,v 1.45 2001/11/06 13:36:52 art Exp $ */
+/* $OpenBSD: kern_fork.c,v 1.46 2001/11/06 18:41:10 art Exp $ */
/* $NetBSD: kern_fork.c,v 1.29 1996/02/09 18:59:34 christos Exp $ */
/*
@@ -79,7 +79,7 @@ sys_fork(p, v, retval)
void *v;
register_t *retval;
{
- return (fork1(p, SIGCHLD, FORK_FORK, NULL, 0, retval));
+ return (fork1(p, SIGCHLD, FORK_FORK, NULL, 0, NULL, NULL, retval));
}
/*ARGSUSED*/
@@ -89,7 +89,8 @@ sys_vfork(p, v, retval)
void *v;
register_t *retval;
{
- return (fork1(p, SIGCHLD, FORK_VFORK|FORK_PPWAIT, NULL, 0, retval));
+ return (fork1(p, SIGCHLD, FORK_VFORK|FORK_PPWAIT, NULL, 0, NULL,
+ NULL, retval));
}
int
@@ -130,16 +131,18 @@ sys_rfork(p, v, retval)
if (rforkflags & RFMEM)
flags |= FORK_VMNOSTACK;
- return (fork1(p, SIGCHLD, flags, NULL, 0, retval));
+ return (fork1(p, SIGCHLD, flags, NULL, 0, NULL, NULL, retval));
}
int
-fork1(p1, exitsig, flags, stack, stacksize, retval)
- register struct proc *p1;
+fork1(p1, exitsig, flags, stack, stacksize, func, arg, retval)
+ struct proc *p1;
int exitsig;
int flags;
void *stack;
size_t stacksize;
+ void (*func)(void *);
+ void *arg;
register_t *retval;
{
struct proc *p2;
@@ -360,7 +363,7 @@ again:
* different path later.
*/
uvm_fork(p1, p2, ((flags & FORK_SHAREVM) ? TRUE : FALSE), stack,
- stacksize);
+ stacksize, func ? func : child_return, arg ? arg : p2);
vm = p2->p_vmspace;