Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 2 Mar 2012 14:05:50 +0000 (UTC)
From:      Ruslan Ermilov <ru@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r232393 - head/lib/libc/gen
Message-ID:  <201203021405.q22E5oCj033406@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: ru
Date: Fri Mar  2 14:05:50 2012
New Revision: 232393
URL: http://svn.freebsd.org/changeset/base/232393

Log:
  Removed excessive _seekdir() call in closedir().  This saves one lseek()
  syscall.  Before r5958, seekdir() was called for its side effect of
  freeing memory allocated by opendir() for rewinddir(), but that revision
  added _reclaim_telldir() that frees all memory allocated by telldir()
  calls, making this call redundant.
  
  This introduces a slight change.  If an application duplicated the descriptor
  obtained through dirfd(), it can no longer rely on file position to be
  reset to the start of file after a call to closedir().  It's believed to
  be safe because neither POSIX, nor any other OS I've tested (NetBSD, Linux,
  OS X) rewind the file offset pointer on closedir().
  
  Reported by:	Igor Sysoev

Modified:
  head/lib/libc/gen/closedir.c

Modified: head/lib/libc/gen/closedir.c
==============================================================================
--- head/lib/libc/gen/closedir.c	Fri Mar  2 13:19:56 2012	(r232392)
+++ head/lib/libc/gen/closedir.c	Fri Mar  2 14:05:50 2012	(r232393)
@@ -48,14 +48,12 @@ __FBSDID("$FreeBSD$");
  * close a directory.
  */
 int
-closedir(dirp)
-	DIR *dirp;
+closedir(DIR *dirp)
 {
 	int fd;
 
 	if (__isthreaded)
 		_pthread_mutex_lock(&dirp->dd_lock);
-	_seekdir(dirp, dirp->dd_rewind);	/* free seekdir storage */
 	fd = dirp->dd_fd;
 	dirp->dd_fd = -1;
 	dirp->dd_loc = 0;



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