From 75a44ba568e363957a91e949e89a03b421cab728 Mon Sep 17 00:00:00 2001 From: Bill Joy Date: Mon, 2 Feb 1981 02:01:33 -0800 Subject: [PATCH] UCBIPC crud SCCS-vsn: sys/kern/kern_proc.c 4.4 SCCS-vsn: sys/kern/vfs_vnops.c 4.4 SCCS-vsn: sys/kern/tty_subr.c 4.5 SCCS-vsn: sys/kern/kern_synch.c 4.4 --- usr/src/sys/kern/kern_proc.c | 37 ++++++++++++++++++++++++++++++++--- usr/src/sys/kern/kern_synch.c | 16 +++++++++++---- usr/src/sys/kern/tty_subr.c | 4 ++-- usr/src/sys/kern/vfs_vnops.c | 20 ++++++++++--------- 4 files changed, 59 insertions(+), 18 deletions(-) diff --git a/usr/src/sys/kern/kern_proc.c b/usr/src/sys/kern/kern_proc.c index f9fedea790..b985dca248 100644 --- a/usr/src/sys/kern/kern_proc.c +++ b/usr/src/sys/kern/kern_proc.c @@ -1,4 +1,4 @@ -/* kern_proc.c 4.3 %G% */ +/* kern_proc.c 4.4 %G% */ #include "../h/param.h" #include "../h/systm.h" @@ -393,6 +393,9 @@ setregs() { register int (**rp)(); register i; +#ifdef UCBIPC + register struct port *pt; +#endif UCBIPC long sigmask; for(rp = &u.u_signal[0], sigmask = 1L; rp < &u.u_signal[NSIG]; @@ -429,8 +432,21 @@ setregs() u.u_ar0[PC] = u.u_exdata.ux_entloc + 2; /* skip over entry mask */ for(i=0; ipt_count == 0) + ptclose(pt); + u.u_pofile[i] &= ~ISPORT; + u.u_oport[i] = NULL; + } else { + closef(u.u_ofile[i]); + u.u_ofile[i] = NULL; + } +#endif UCBIPC u.u_pofile[i] &= ~EXCLOSE; } } @@ -467,6 +483,9 @@ exit(rv) register int i; register struct proc *p, *q; register struct file *f; +#ifdef UCBIPC + register struct port *pt; +#endif UCBIPC register int x; #ifdef PGINPROF @@ -505,9 +524,22 @@ exit(rv) p->p_flag &= ~SVFDONE; } for(i=0; ipt_count == 0) + ptclose(pt); + u.u_oport[i] = NULL; + } else { + f = u.u_ofile[i]; + u.u_ofile[i] = NULL; + closef(f); + } +#endif UCBIPC } plock(u.u_cdir); iput(u.u_cdir); @@ -683,14 +715,13 @@ fork1(isvfork) a++; } } - /* * Disallow if * No processes at all; * not su and too many procs owned; or * not su and would take last slot. */ - if (p2==NULL || (u.u_uid!=0 && (p2>=&proc[NPROC-5] || a>MAXUPRC))) { + if (p2==NULL || (u.u_uid!=0 && (p2==&proc[NPROC-1] || a>MAXUPRC))) { u.u_error = EAGAIN; if (!isvfork) { (void) vsexpand(0, &u.u_cdmap, 1); diff --git a/usr/src/sys/kern/kern_synch.c b/usr/src/sys/kern/kern_synch.c index 52e61f02fd..c1702cd785 100644 --- a/usr/src/sys/kern/kern_synch.c +++ b/usr/src/sys/kern/kern_synch.c @@ -1,4 +1,4 @@ -/* kern_synch.c 4.3 %G% */ +/* kern_synch.c 4.4 %G% */ #include "../h/param.h" #include "../h/systm.h" @@ -357,9 +357,17 @@ retry: for(n=0; nf_count++; - if(!isvfork && u.u_vrpages[n]) - u.u_ofile[n]->f_inode->i_vfdcnt++; +#ifdef UCBIPC + if (u.u_pofile[n] & ISPORT) + u.u_oport[n]->pt_count++; + else { +#endif + u.u_ofile[n]->f_count++; + if(!isvfork && u.u_vrpages[n]) + u.u_ofile[n]->f_inode->i_vfdcnt++; +#ifdef UCBIPC + } +#endif UCBIPC } u.u_cdir->i_count++; diff --git a/usr/src/sys/kern/tty_subr.c b/usr/src/sys/kern/tty_subr.c index b702c1ae86..865072079a 100644 --- a/usr/src/sys/kern/tty_subr.c +++ b/usr/src/sys/kern/tty_subr.c @@ -1,4 +1,4 @@ -/* tty_subr.c 4.4 %G% */ +/* tty_subr.c 4.5 %G% */ #include "../h/param.h" #include "../h/systm.h" @@ -399,7 +399,7 @@ register s; return(f); } -#ifdef notdef +#ifdef UCBIPC char * nb_to_q(cp, cc, q) register char *cp; diff --git a/usr/src/sys/kern/vfs_vnops.c b/usr/src/sys/kern/vfs_vnops.c index aeff139490..f63b48b66c 100644 --- a/usr/src/sys/kern/vfs_vnops.c +++ b/usr/src/sys/kern/vfs_vnops.c @@ -1,4 +1,4 @@ -/* vfs_vnops.c 4.3 %G% */ +/* vfs_vnops.c 4.4 %G% */ #include "../h/param.h" #include "../h/systm.h" @@ -25,13 +25,17 @@ register int f; { register struct file *fp; - if(0 <= f && f < NOFILE) { - fp = u.u_ofile[f]; - if(fp != NULL) - return(fp); + if ((unsigned)f >= NOFILE || (fp = u.u_ofile[f]) == NULL) { + u.u_error = EBADF; + return (NULL); } - u.u_error = EBADF; - return(NULL); +#ifdef UCBIPC + if (u.u_pofile[f] & ISPORT) { + u.u_error = EISPORT; + return (NULL); + } +#endif + return (fp); } /* @@ -100,7 +104,6 @@ register struct file *fp; if (fp->f_count && (ip=fp->f_inode)->i_un.i_rdev==dev && (ip->i_mode&IFMT) == mode) return; - if (mode == IFBLK) { /* * on last close of a block device (that isn't mounted) @@ -110,7 +113,6 @@ register struct file *fp; binval(dev); } } - (*cfunc)(dev, flag, fp); } -- 2.20.1