projects
/
unix-history
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
tags
|
clone url
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Berkeley copyright
[unix-history]
/
usr
/
src
/
sys
/
kern
/
kern_fork.c
diff --git
a/usr/src/sys/kern/kern_fork.c
b/usr/src/sys/kern/kern_fork.c
index
8878cad
..
d6e2f1c
100644
(file)
--- a/
usr/src/sys/kern/kern_fork.c
+++ b/
usr/src/sys/kern/kern_fork.c
@@
-1,9
+1,9
@@
/*
/*
- * Copyright (c) 1982 Regents of the University of California.
+ * Copyright (c) 1982
, 1986
Regents of the University of California.
* All rights reserved. The Berkeley software License Agreement
* specifies the terms and conditions for redistribution.
*
* All rights reserved. The Berkeley software License Agreement
* specifies the terms and conditions for redistribution.
*
- * @(#)kern_fork.c
6.7
(Berkeley) %G%
+ * @(#)kern_fork.c
7.3
(Berkeley) %G%
*/
#include "../machine/reg.h"
*/
#include "../machine/reg.h"
@@
-73,8
+73,8
@@
fork1(isvfork)
if (p2==NULL || (u.u_uid!=0 && (p2->p_nxt == NULL || a>MAXUPRC))) {
u.u_error = EAGAIN;
if (!isvfork) {
if (p2==NULL || (u.u_uid!=0 && (p2->p_nxt == NULL || a>MAXUPRC))) {
u.u_error = EAGAIN;
if (!isvfork) {
- (void) vsexpand(0, &u.u_cdmap, 1);
- (void) vsexpand(0, &u.u_csmap, 1);
+ (void) vsexpand(
(size_t)
0, &u.u_cdmap, 1);
+ (void) vsexpand(
(size_t)
0, &u.u_csmap, 1);
}
goto out;
}
}
goto out;
}
@@
-129,15
+129,16
@@
retry:
rpp = allproc;
again:
for (; rpp != NULL; rpp = rpp->p_nxt) {
rpp = allproc;
again:
for (; rpp != NULL; rpp = rpp->p_nxt) {
- if (rpp->p_pid == mpid || rpp->p_pgrp == mpid) {
+ if (rpp->p_pid == mpid || rpp->p_pgrp
->pg_id
== mpid) {
mpid++;
if (mpid >= pidchecked)
goto retry;
}
if (rpp->p_pid > mpid && pidchecked > rpp->p_pid)
pidchecked = rpp->p_pid;
mpid++;
if (mpid >= pidchecked)
goto retry;
}
if (rpp->p_pid > mpid && pidchecked > rpp->p_pid)
pidchecked = rpp->p_pid;
- if (rpp->p_pgrp > mpid && pidchecked > rpp->p_pgrp)
- pidchecked = rpp->p_pgrp;
+ if (rpp->p_pgrp->pg_id > mpid &&
+ pidchecked > rpp->p_pgrp->pg_id)
+ pidchecked = rpp->p_pgrp->pg_id;
}
if (!doingzomb) {
doingzomb = 1;
}
if (!doingzomb) {
doingzomb = 1;
@@
-161,6
+162,10
@@
again:
#ifdef QUOTA
rpp->p_quota = rip->p_quota;
rpp->p_quota->q_cnt++;
#ifdef QUOTA
rpp->p_quota = rip->p_quota;
rpp->p_quota->q_cnt++;
+#endif
+#if defined(tahoe)
+ rpp->p_ckey = rip->p_ckey;
+ rpp->p_dkey = 0;
#endif
rpp->p_stat = SIDL;
timerclear(&rpp->p_realtimer.it_value);
#endif
rpp->p_stat = SIDL;
timerclear(&rpp->p_realtimer.it_value);
@@
-172,6
+177,8
@@
again:
rpp->p_ndx = rpp - proc;
rpp->p_uid = rip->p_uid;
rpp->p_pgrp = rip->p_pgrp;
rpp->p_ndx = rpp - proc;
rpp->p_uid = rip->p_uid;
rpp->p_pgrp = rip->p_pgrp;
+ rpp->p_pgrpnxt = rip->p_pgrpnxt;
+ rip->p_pgrpnxt = rpp;
rpp->p_nice = rip->p_nice;
rpp->p_textp = isvfork ? 0 : rip->p_textp;
rpp->p_pid = mpid;
rpp->p_nice = rip->p_nice;
rpp->p_textp = isvfork ? 0 : rip->p_textp;
rpp->p_pid = mpid;
@@
-237,7
+244,7
@@
again:
/*
* Make child runnable and add to run queue.
*/
/*
* Make child runnable and add to run queue.
*/
- (void) spl
6
();
+ (void) spl
clock
();
rpp->p_stat = SRUN;
setrq(rpp);
(void) spl0();
rpp->p_stat = SRUN;
setrq(rpp);
(void) spl0();