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;
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to