summaryrefslogtreecommitdiffstats
path: root/sys/kern
diff options
context:
space:
mode:
authordwmalone <dwmalone@FreeBSD.org>2004-02-15 21:14:48 +0000
committerdwmalone <dwmalone@FreeBSD.org>2004-02-15 21:14:48 +0000
commit824c230543eae3766e5a429669e3b8fe19fa8e73 (patch)
tree3c8a98381c8d8b13347216fa13bccc35d944ff14 /sys/kern
parentd3d228237561f16ad427ffaf3b036f2339ed0104 (diff)
downloadFreeBSD-src-824c230543eae3766e5a429669e3b8fe19fa8e73.zip
FreeBSD-src-824c230543eae3766e5a429669e3b8fe19fa8e73.tar.gz
In fdcheckstd the descriptor table should never be shared, so just
KASSERT this rather than trying to deal with what happens when file descriptors change out from under us.
Diffstat (limited to 'sys/kern')
-rw-r--r--sys/kern/kern_descrip.c16
1 files changed, 7 insertions, 9 deletions
diff --git a/sys/kern/kern_descrip.c b/sys/kern/kern_descrip.c
index abaac90..dba542d 100644
--- a/sys/kern/kern_descrip.c
+++ b/sys/kern/kern_descrip.c
@@ -1737,11 +1737,12 @@ fdcheckstd(td)
struct filedesc *fdp;
struct file *fp;
register_t retval;
- int fd, i, error, flags, devnull, extraref;
+ int fd, i, error, flags, devnull;
fdp = td->td_proc->p_fd;
if (fdp == NULL)
return (0);
+ KASSERT(fdp->fd_refcnt == 1, ("the fdtable should not be shared"));
devnull = -1;
error = 0;
for (i = 0; i < 3; i++) {
@@ -1763,17 +1764,14 @@ fdcheckstd(td)
* file descriptor table, so check it hasn't
* changed before dropping the reference count.
*/
- extraref = 0;
FILEDESC_LOCK(fdp);
- if (fdp->fd_ofiles[fd] == fp) {
- fdp->fd_ofiles[fd] = NULL;
- fdunused(fdp, fd);
- extraref = 1;
- }
+ KASSERT(fdp->fd_ofiles[fd] == fp,
+ ("table not shared, how did it change?"));
+ fdp->fd_ofiles[fd] = NULL;
+ fdunused(fdp, fd);
FILEDESC_UNLOCK(fdp);
fdrop(fp, td);
- if (extraref)
- fdrop(fp, td);
+ fdrop(fp, td);
break;
}
NDFREE(&nd, NDF_ONLY_PNBUF);
OpenPOWER on IntegriCloud