Berkeley copyright
[unix-history] / usr / src / sys / kern / kern_fork.c
index 8878cad..d6e2f1c 100644 (file)
@@ -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) spl6();
+       (void) splclock();
        rpp->p_stat = SRUN;
        setrq(rpp);
        (void) spl0();
        rpp->p_stat = SRUN;
        setrq(rpp);
        (void) spl0();