summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authorsmpatel <smpatel@FreeBSD.org>1996-08-15 16:33:32 +0000
committersmpatel <smpatel@FreeBSD.org>1996-08-15 16:33:32 +0000
commit6c8326977df550a2a016b180753415ee446ee145 (patch)
tree38176302d10f86fa277e77e8bab911a9a9431c78 /sys
parentae50699cc159fb3efe7ee8666e0b6b341caf2721 (diff)
downloadFreeBSD-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.c8
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);
OpenPOWER on IntegriCloud