svn commit: r232393 - head/lib/libc/gen

Ruslan Ermilov ru at FreeBSD.org
Fri Mar 2 14:05:50 UTC 2012


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;


More information about the svn-src-all mailing list