Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 6 Jul 2014 23:20:49 +0000 (UTC)
From:      Mateusz Guzik <mjg@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org
Subject:   svn commit: r268344 - stable/10/sys/kern
Message-ID:  <201407062320.s66NKnce086437@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: mjg
Date: Sun Jul  6 23:20:48 2014
New Revision: 268344
URL: http://svnweb.freebsd.org/changeset/base/268344

Log:
  MFC r268000:
  
  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.

Modified:
  stable/10/sys/kern/kern_descrip.c
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/sys/kern/kern_descrip.c
==============================================================================
--- stable/10/sys/kern/kern_descrip.c	Sun Jul  6 23:17:21 2014	(r268343)
+++ stable/10/sys/kern/kern_descrip.c	Sun Jul  6 23:20:48 2014	(r268344)
@@ -2036,6 +2036,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);
@@ -2053,11 +2058,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))



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201407062320.s66NKnce086437>