panic if init dies
[unix-history] / usr / src / sys / kern / kern_proc.c
index dd800de..6ef226f 100644 (file)
@@ -1,4 +1,4 @@
-/*     kern_proc.c     3.22    %G%     */
+/*     kern_proc.c     3.26    %G%     */
 
 #include "../h/param.h"
 #include "../h/systm.h"
 
 #include "../h/param.h"
 #include "../h/systm.h"
@@ -113,7 +113,7 @@ exece()
                bdwrite(bp);
        bp = 0;
        nc = (nc + NBPW-1) & ~(NBPW-1);
                bdwrite(bp);
        bp = 0;
        nc = (nc + NBPW-1) & ~(NBPW-1);
-       getxfile(ip, nc);
+       getxfile(ip, nc + (na+4)*NBPW);
        if (u.u_error) {
 badarg:
                for (c = 0; c < nc; c += BSIZE)
        if (u.u_error) {
 badarg:
                for (c = 0; c < nc; c += BSIZE)
@@ -411,7 +411,8 @@ exit(rv)
        else
                p->p_siga1 = 0;
        (void) spl0();
        else
                p->p_siga1 = 0;
        (void) spl0();
-       p->p_aveflt = 0;
+       p->p_cpticks = 0;
+       p->p_pctcpu = 0;
        for(i=0; i<NSIG; i++)
                u.u_signal[i] = SIG_IGN;
        /*
        for(i=0; i<NSIG; i++)
                u.u_signal[i] = SIG_IGN;
        /*
@@ -445,8 +446,8 @@ exit(rv)
        vrelu(u.u_procp, 0);
        multprog--;
 /*     spl7();                 /* clock will get mad because of overlaying */
        vrelu(u.u_procp, 0);
        multprog--;
 /*     spl7();                 /* clock will get mad because of overlaying */
-       noproc = 1;
        p->p_stat = SZOMB;
        p->p_stat = SZOMB;
+       noproc = 1;
        i = PIDHASH(p->p_pid);
        x = p - proc;
        if (pidhash[i] == x)
        i = PIDHASH(p->p_pid);
        x = p - proc;
        if (pidhash[i] == x)
@@ -459,6 +460,8 @@ exit(rv)
                        }
                panic("exit");
        }
                        }
                panic("exit");
        }
+       if (p->p_pid == 1)
+               panic("init died");
 done:
        ((struct xproc *)p)->xp_xstat = rv;             /* overlay */
        ((struct xproc *)p)->xp_vm = u.u_vm;            /* overlay */
 done:
        ((struct xproc *)p)->xp_xstat = rv;             /* overlay */
        ((struct xproc *)p)->xp_vm = u.u_vm;            /* overlay */