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
bug fixes from elz and utcsrgv!thomson
[unix-history]
/
usr
/
src
/
sys
/
kern
/
kern_proc.c
diff --git
a/usr/src/sys/kern/kern_proc.c
b/usr/src/sys/kern/kern_proc.c
index
c2c6270
..
53cab4f
100644
(file)
--- a/
usr/src/sys/kern/kern_proc.c
+++ b/
usr/src/sys/kern/kern_proc.c
@@
-1,4
+1,4
@@
-/* kern_proc.c 4.
13 81/11/08
*/
+/* kern_proc.c 4.
25 82/04/02
*/
#include "../h/param.h"
#include "../h/systm.h"
#include "../h/param.h"
#include "../h/systm.h"
@@
-49,7
+49,7
@@
exece()
char cfname[DIRSIZ];
char cfarg[SHSIZE];
char cfname[DIRSIZ];
char cfarg[SHSIZE];
- if ((ip = namei(uchar, 0)) == NULL)
+ if ((ip = namei(uchar, 0
, 1
)) == NULL)
return;
bno = 0;
bp = 0;
return;
bno = 0;
bp = 0;
@@
-94,8
+94,8
@@
exece()
u.u_segflg = 0;
if (u.u_error)
goto bad;
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;
}
u.u_error = ENOEXEC;
goto bad;
}
@@
-154,7
+154,7
@@
exece()
bcopy((caddr_t)u.u_dbuf, (caddr_t)cfname, DIRSIZ);
indir = 1;
iput(ip);
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;
if (ip == NULL)
return;
goto again;
@@
-372,6
+372,7
@@
register struct inode *ip;
u.u_uid = uid;
u.u_procp->p_uid = uid;
u.u_gid = gid;
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;
} else
psignal(u.u_procp, SIGTRAP);
u.u_tsize = ts;
@@
-390,7
+391,7
@@
setregs()
register i;
long sigmask;
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) {
sigmask <<= 1, rp++) {
switch (*rp) {
@@
-408,7
+409,7
@@
setregs()
if ((int)*rp & 1)
u.u_procp->p_siga0 |= sigmask;
else
if ((int)*rp & 1)
u.u_procp->p_siga0 |= sigmask;
else
- u.u_procp->p_siga
1
&= ~sigmask;
+ u.u_procp->p_siga
0
&= ~sigmask;
if ((int)*rp & 2)
u.u_procp->p_siga1 |= sigmask;
else
if ((int)*rp & 2)
u.u_procp->p_siga1 |= sigmask;
else
@@
-424,7
+425,7
@@
setregs()
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) {
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;
}
u.u_ofile[i] = NULL;
u.u_pofile[i] &= ~EXCLOSE;
}
@@
-502,7
+503,7
@@
exit(rv)
for (i=0; i<NOFILE; i++) {
f = u.u_ofile[i];
u.u_ofile[i] = NULL;
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);
}
ilock(u.u_cdir);
iput(u.u_cdir);
@@
-514,6
+515,7
@@
exit(rv)
acct();
vrelpt(u.u_procp);
vrelu(u.u_procp, 0);
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;
multprog--;
p->p_stat = SZOMB;
noproc = 1;
@@
-557,13
+559,12
@@
done:
}
/*
* Protect this process from future
}
/*
* 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);
}
*/
(void) spgrp(q, -1);
}
- wakeup((caddr_t)p->p_pptr);
psignal(p->p_pptr, SIGCHLD);
psignal(p->p_pptr, SIGCHLD);
+ wakeup((caddr_t)p->p_pptr);
swtch();
}
swtch();
}