diff options
author | smpatel <smpatel@FreeBSD.org> | 1996-08-15 16:33:32 +0000 |
---|---|---|
committer | smpatel <smpatel@FreeBSD.org> | 1996-08-15 16:33:32 +0000 |
commit | 6c8326977df550a2a016b180753415ee446ee145 (patch) | |
tree | 38176302d10f86fa277e77e8bab911a9a9431c78 /sys | |
parent | ae50699cc159fb3efe7ee8666e0b6b341caf2721 (diff) | |
download | FreeBSD-src-6c8326977df550a2a016b180753415ee446ee145.zip FreeBSD-src-6c8326977df550a2a016b180753415ee446ee145.tar.gz |
Fix fdavail() so that correctly pays attention to the rlimit.
Fixes unp_externalize panic which occurs when a process is at it's
ulimit for file descriptors and tries to receive a file descriptor from
another process.
Reviewed by: wollman
Diffstat (limited to 'sys')
-rw-r--r-- | sys/kern/kern_descrip.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/sys/kern/kern_descrip.c b/sys/kern/kern_descrip.c index aaf9344..74ac9eb 100644 --- a/sys/kern/kern_descrip.c +++ b/sys/kern/kern_descrip.c @@ -36,7 +36,7 @@ * SUCH DAMAGE. * * @(#)kern_descrip.c 8.6 (Berkeley) 4/19/94 - * $Id: kern_descrip.c,v 1.29 1996/06/12 05:07:26 gpalmer Exp $ + * $Id: kern_descrip.c,v 1.30 1996/06/17 16:54:03 wpaul Exp $ */ #include <sys/param.h> @@ -619,13 +619,15 @@ fdavail(p, n) { register struct filedesc *fdp = p->p_fd; register struct file **fpp; - register int i, lim; + register int i, lim, last; lim = min((int)p->p_rlimit[RLIMIT_NOFILE].rlim_cur, maxfilesperproc); if ((i = lim - fdp->fd_nfiles) > 0 && (n -= i) <= 0) return (1); + + last = min(fdp->fd_nfiles, lim); fpp = &fdp->fd_ofiles[fdp->fd_freefile]; - for (i = fdp->fd_nfiles - fdp->fd_freefile; --i >= 0; fpp++) + for (i = last - fdp->fd_freefile; --i >= 0; fpp++) if (*fpp == NULL && --n <= 0) return (1); return (0); |