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.23-492-ge3c0687


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  e3c0687de17a97e5dcd991841b54bec181b30e90 (commit)
      from  43c2948756bb6e144c7b871e827bba37d61ad3a3 (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://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=e3c0687de17a97e5dcd991841b54bec181b30e90

commit e3c0687de17a97e5dcd991841b54bec181b30e90
Author: Carlos O'Donell <carlos@redhat.com>
Date:   Sun Jun 19 15:46:26 2016 -0400

    Expand comments in Linux times() implementation.

diff --git a/ChangeLog b/ChangeLog
index af3dd66..d610e9b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2016-06-19  Carlos O'Donell  <carlos@redhat.com>
+
+	* sysdeps/unix/sysv/linux/times.c (__times): Expand comments.
+
 2016-06-18  Aurelien Jarno  <aurelien@aurel32.net>
 
 	* sysdeps/unix/sysv/linux/mips/vfork.S (__vfork): Conditionalize
diff --git a/sysdeps/unix/sysv/linux/times.c b/sysdeps/unix/sysv/linux/times.c
index 8f3033b..fd2b370 100644
--- a/sysdeps/unix/sysv/linux/times.c
+++ b/sysdeps/unix/sysv/linux/times.c
@@ -29,11 +29,13 @@ __times (struct tms *buf)
       && __builtin_expect (INTERNAL_SYSCALL_ERRNO (ret, err) == EFAULT, 0)
       && buf)
     {
-      /* This might be an error or not.  For architectures which have
-	 no separate return value and error indicators we cannot
-	 distinguish a return value of -1 from an error.  Do it the
-	 hard way.  We crash applications which pass in an invalid
-	 non-NULL BUF pointer.  Linux allows BUF to be NULL. */
+      /* This might be an error or not.  For architectures which have no
+	 separate return value and error indicators we cannot
+	 distinguish a return value of e.g. (clock_t) -14 from -EFAULT.
+	 Therefore the only course of action is to dereference the user
+	 -supplied structure on a return of (clock_t) -14.  This will crash
+	 applications which pass in an invalid non-NULL BUF pointer.
+	 Note that Linux allows BUF to be NULL in which case we skip this.  */
 #define touch(v) \
       do {								      \
 	clock_t temp = v;						      \
@@ -45,13 +47,18 @@ __times (struct tms *buf)
       touch (buf->tms_cutime);
       touch (buf->tms_cstime);
 
-      /* If we come here the memory is valid (or BUF is NULL, which is
-         a valid condition for the kernel syscall) and the kernel did not
-	 return an EFAULT error.  Return the value given by the kernel.  */
+      /* If we come here the memory is valid and the kernel did not
+	 return an EFAULT error, but rather e.g. (clock_t) -14.
+	 Return the value given by the kernel.  */
     }
 
-  /* Return value (clock_t) -1 signals an error, but if there wasn't any,
-     return the following value.  */
+  /* On Linux this function never fails except with EFAULT.
+     POSIX says that returning a value (clock_t) -1 indicates an error,
+     but on Linux this is simply one of the valid clock values after
+     clock_t wraps.  Therefore when we would return (clock_t) -1, we
+     instead return (clock_t) 0, and loose a tick of accuracy (having
+     returned 0 for two consecutive calls even though the clock
+     advanced).  */
   if (ret == (clock_t) -1)
     return (clock_t) 0;
 

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

Summary of changes:
 ChangeLog                       |    4 ++++
 sysdeps/unix/sysv/linux/times.c |   27 +++++++++++++++++----------
 2 files changed, 21 insertions(+), 10 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]