Index: sys/kern/kern_descrip.c =================================================================== --- sys/kern/kern_descrip.c +++ sys/kern/kern_descrip.c @@ -4194,6 +4194,8 @@ if (fdp == NULL) continue; FILEDESC_SLOCK(fdp); + if (refcount_load(&fdp->fd_refcnt) == 0) + goto nextproc; FILEDESC_FOREACH_FP(fdp, n, fp) { if (refcount_load(&fdp->fd_refcnt) == 0) break; @@ -4210,6 +4212,7 @@ if (error) break; } +nextproc: FILEDESC_SUNLOCK(fdp); fddrop(fdp); if (error) @@ -4469,6 +4472,8 @@ if (pwd != NULL) pwd_drop(pwd); FILEDESC_SLOCK(fdp); + if (refcount_load(&fdp->fd_refcnt) == 0) + goto skip; FILEDESC_FOREACH_FP(fdp, i, fp) { if (refcount_load(&fdp->fd_refcnt) == 0) break; @@ -4487,6 +4492,7 @@ if (error != 0) break; } +skip: FILEDESC_SUNLOCK(fdp); fail: if (fdp != NULL) @@ -4633,6 +4639,8 @@ if (pwd != NULL) pwd_drop(pwd); FILEDESC_SLOCK(fdp); + if (refcount_load(&fdp->fd_refcnt) == 0) + goto skip; FILEDESC_FOREACH_FP(fdp, i, fp) { if (refcount_load(&fdp->fd_refcnt) == 0) break; @@ -4645,6 +4653,7 @@ if (error) break; } +skip: FILEDESC_SUNLOCK(fdp); fddrop(fdp); pddrop(pdp);