svn commit: r268000 - head/sys/kern

Mateusz Guzik mjg at FreeBSD.org
Sat Jun 28 05:18:04 UTC 2014


Author: mjg
Date: Sat Jun 28 05:18:03 2014
New Revision: 268000
URL: http://svnweb.freebsd.org/changeset/base/268000

Log:
  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

Modified:
  head/sys/kern/kern_descrip.c

Modified: head/sys/kern/kern_descrip.c
==============================================================================
--- head/sys/kern/kern_descrip.c	Sat Jun 28 04:32:42 2014	(r267999)
+++ head/sys/kern/kern_descrip.c	Sat Jun 28 05:18:03 2014	(r268000)
@@ -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))


More information about the svn-src-all mailing list