diff --git a/sys/kern/kern_descrip.c b/sys/kern/kern_descrip.c index abaac90655e6..dba542d0551b 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);