-/* kern_proc.c 4.13 81/11/08 */
+/* kern_proc.c 4.25 82/04/02 */
#include "../h/param.h"
#include "../h/systm.h"
char cfname[DIRSIZ];
char cfarg[SHSIZE];
- if ((ip = namei(uchar, 0)) == NULL)
+ if ((ip = namei(uchar, 0, 1)) == NULL)
return;
bno = 0;
bp = 0;
u.u_segflg = 0;
if (u.u_error)
goto bad;
- if (u.u_count > sizeof(u.u_exdata) - sizeof(u.u_exdata.Ux_A)
- && u.u_exdata.ux_shell[0] != '#') {
+ if (u.u_count > sizeof(u.u_exdata) - sizeof(u.u_exdata.Ux_A) &&
+ u.u_exdata.ux_shell[0] != '#') {
u.u_error = ENOEXEC;
goto bad;
}
bcopy((caddr_t)u.u_dbuf, (caddr_t)cfname, DIRSIZ);
indir = 1;
iput(ip);
- ip = namei(schar, 0);
+ ip = namei(schar, 0, 1);
if (ip == NULL)
return;
goto again;
u.u_uid = uid;
u.u_procp->p_uid = uid;
u.u_gid = gid;
+ u.u_grps[gid/(sizeof(int)*8)] |= 1 << (gid%(sizeof(int)*8));
} else
psignal(u.u_procp, SIGTRAP);
u.u_tsize = ts;
register i;
long sigmask;
- for (rp = &u.u_signal[0], sigmask = 1L; rp < &u.u_signal[NSIG];
+ for (rp = &u.u_signal[1], sigmask = 1L; rp < &u.u_signal[NSIG];
sigmask <<= 1, rp++) {
switch (*rp) {
if ((int)*rp & 1)
u.u_procp->p_siga0 |= sigmask;
else
- u.u_procp->p_siga1 &= ~sigmask;
+ u.u_procp->p_siga0 &= ~sigmask;
if ((int)*rp & 2)
u.u_procp->p_siga1 |= sigmask;
else
u.u_ar0[PC] = u.u_exdata.ux_entloc + 2; /* skip over entry mask */
for (i=0; i<NOFILE; i++) {
if (u.u_pofile[i]&EXCLOSE) {
- closef(u.u_ofile[i]);
+ closef(u.u_ofile[i], 1);
u.u_ofile[i] = NULL;
u.u_pofile[i] &= ~EXCLOSE;
}
for (i=0; i<NOFILE; i++) {
f = u.u_ofile[i];
u.u_ofile[i] = NULL;
- closef(f);
+ closef(f, 1);
}
ilock(u.u_cdir);
iput(u.u_cdir);
acct();
vrelpt(u.u_procp);
vrelu(u.u_procp, 0);
+ (void) spl5(); /* hack for mem alloc race XXX */
multprog--;
p->p_stat = SZOMB;
noproc = 1;
}
/*
* Protect this process from future
- * tty signals, clear TSTP/TTIN/TTOU if pending,
- * and set SDETACH bit on procs.
+ * tty signals, clear TSTP/TTIN/TTOU if pending.
*/
(void) spgrp(q, -1);
}
- wakeup((caddr_t)p->p_pptr);
psignal(p->p_pptr, SIGCHLD);
+ wakeup((caddr_t)p->p_pptr);
swtch();
}