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
This commit is contained in:
Mateusz Guzik 2014-06-28 05:18:03 +00:00
parent 6a3287f889
commit 35778d7aa9
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=268000

View File

@ -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))