From 35778d7aa9cf3fb7622c3d46b069082f95650d9d Mon Sep 17 00:00:00 2001 From: Mateusz Guzik Date: Sat, 28 Jun 2014 05:18:03 +0000 Subject: [PATCH] Make sure to always clear p_fd for process getting rid of its filetable. Filetable can be shared with other processes. Previous code failed to clear the pointer for all but the last process getting rid of the table. This is mostly cosmetics. Get rid of 'This should happen earlier' comment. Clearing the pointer in this place is fine as consumers can reliably check for files availability by inspecting fd_refcnt and vnodes availabity by NULL-checking them. MFC after: 1 week --- sys/kern/kern_descrip.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/sys/kern/kern_descrip.c b/sys/kern/kern_descrip.c index 25c3a1ea10c..f73a4cf874d 100644 --- a/sys/kern/kern_descrip.c +++ b/sys/kern/kern_descrip.c @@ -2003,6 +2003,11 @@ fdescfree(struct thread *td) if (fdtol != NULL) free(fdtol, M_FILEDESC_TO_LEADER); } + + mtx_lock(&fdesc_mtx); + td->td_proc->p_fd = NULL; + mtx_unlock(&fdesc_mtx); + FILEDESC_XLOCK(fdp); i = --fdp->fd_refcnt; FILEDESC_XUNLOCK(fdp); @@ -2020,11 +2025,6 @@ fdescfree(struct thread *td) } FILEDESC_XLOCK(fdp); - /* XXX This should happen earlier. */ - mtx_lock(&fdesc_mtx); - td->td_proc->p_fd = NULL; - mtx_unlock(&fdesc_mtx); - if (fdp->fd_nfiles > NDFILE) free(fdp->fd_ofiles, M_FILEDESC); if (NDSLOTS(fdp->fd_nfiles) > NDSLOTS(NDFILE))