This is the mail archive of the glibc-cvs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

GNU C Library master sources branch, master, updated. glibc-2.13-118-g28377d1


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, master has been updated
       via  28377d1bf58625172a1734b92e835591d4d23a18 (commit)
      from  66bdbaa4522f561d4ea90a77af243c004ecf642c (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://sources.redhat.com/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=28377d1bf58625172a1734b92e835591d4d23a18

commit 28377d1bf58625172a1734b92e835591d4d23a18
Author: Ulrich Drepper <drepper@gmail.com>
Date:   Sun May 8 00:48:30 2011 -0400

    Optimize fdopendir a bit.
    
    Don't call fcntl(F_SETFD) unnecessarily.

diff --git a/ChangeLog b/ChangeLog
index 7d2da4e..132f0d0 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2011-05-08  Ulrich Drepper  <drepper@gmail.com>
+
+	* include/dirent.h (__alloc_dir): Add flags parameter.
+	* sysdeps/unix/fdopendir.c (__fdopendir): Pass flags to __alloc_dir.
+	* sysdeps/unix/opendir.c (__opendir): Pass 0 in new parameter to
+	__alloc_dir.
+	(__alloc_dir): Take new parameter.  Don't call fcntl for invocations
+	from fdopendir if O_CLOEXEC is already set.
+
 2011-03-15  Alan Modra  <amodra@gmail.com>
 
 	* elf/dl-reloc.c (_dl_try_allocate_static_tls <TLS_DTV_AT_TP>): Handle
diff --git a/include/dirent.h b/include/dirent.h
index 3f6c4b9..4db63a6 100644
--- a/include/dirent.h
+++ b/include/dirent.h
@@ -28,7 +28,8 @@ extern int __alphasort64 (const struct dirent64 **a, const struct dirent64 **b)
 extern int __versionsort64 (const struct dirent64 **a,
 			    const struct dirent64 **b)
      __attribute_pure__;
-extern DIR *__alloc_dir (int fd, bool close_fd, const struct stat64 *statp)
+extern DIR *__alloc_dir (int fd, bool close_fd, int flags,
+			 const struct stat64 *statp)
      internal_function;
 
 #endif
diff --git a/sysdeps/unix/fdopendir.c b/sysdeps/unix/fdopendir.c
index 565ce1e..9c5969d 100644
--- a/sysdeps/unix/fdopendir.c
+++ b/sysdeps/unix/fdopendir.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2005, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 2005, 2006, 2011 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -47,6 +47,6 @@ __fdopendir (int fd)
       return NULL;
     }
 
-  return __alloc_dir (fd, false, &statbuf);
+  return __alloc_dir (fd, false, flags, &statbuf);
 }
 weak_alias (__fdopendir, fdopendir)
diff --git a/sysdeps/unix/opendir.c b/sysdeps/unix/opendir.c
index fbf14f5..c2d1dda 100644
--- a/sysdeps/unix/opendir.c
+++ b/sysdeps/unix/opendir.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991-1996,98,2000-2003,2005,2007,2009
+/* Copyright (C) 1991-1996,98,2000-2003,2005,2007,2009,2011
    Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
@@ -138,7 +138,7 @@ __opendir (const char *name)
       statp = &statbuf;
     }
 
-  return __alloc_dir (fd, true, statp);
+  return __alloc_dir (fd, true, 0, statp);
 }
 weak_alias (__opendir, opendir)
 
@@ -158,13 +158,14 @@ check_have_o_cloexec (int fd)
 
 DIR *
 internal_function
-__alloc_dir (int fd, bool close_fd, const struct stat64 *statp)
+__alloc_dir (int fd, bool close_fd, int flags, const struct stat64 *statp)
 {
   /* We always have to set the close-on-exit flag if the user provided
      the file descriptor.  Otherwise only if we have no working
      O_CLOEXEC support.  */
 #ifdef O_CLOEXEC
-  if (! close_fd || ! check_have_o_cloexec (fd))
+  if ((! close_fd && (flags & O_CLOEXEC) == 0)
+      || ! check_have_o_cloexec (fd))
 #endif
     {
       if (__builtin_expect (__fcntl (fd, F_SETFD, FD_CLOEXEC), 0) < 0)

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                |    9 +++++++++
 include/dirent.h         |    3 ++-
 sysdeps/unix/fdopendir.c |    4 ++--
 sysdeps/unix/opendir.c   |    9 +++++----
 4 files changed, 18 insertions(+), 7 deletions(-)


hooks/post-receive
-- 
GNU C Library master sources


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]