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.17-797-g58206c6


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  58206c6863f6b861a5e2fa6d3599e487294ded63 (commit)
      from  6a97b62a5b4f18aea849d6f4d8de58d1469d2521 (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=58206c6863f6b861a5e2fa6d3599e487294ded63

commit 58206c6863f6b861a5e2fa6d3599e487294ded63
Author: Siddhesh Poyarekar <siddhesh@redhat.com>
Date:   Thu Jun 13 09:54:35 2013 +0530

    Improve precision of clock() function on Linux
    
    Resolves #12515.
    
    Use CLOCK_PROCESS_CPUTIME_ID instead of times to get better precision
    in the value returned by clock.

diff --git a/ChangeLog b/ChangeLog
index d08f0a6..0452a7c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2013-06-13  Siddhesh Poyarekar  <siddhesh@redhat.com>
+
+	[BZ #12515]
+	* sysdeps/unix/sysv/linux/clock.c (clock): Use result from
+	CLOCK_PROCESS_CPUTIME_ID clock instead of __times.
+
 2013-06-11  Adhemerval Zanella  <azanella@linux.vnet.ibm.com>
 
 	[BZ #15605]
diff --git a/NEWS b/NEWS
index 782010d..354db75 100644
--- a/NEWS
+++ b/NEWS
@@ -10,16 +10,16 @@ Version 2.18
 * The following bugs are resolved with this release:
 
   2546, 2560, 5159, 6809, 10060, 10062, 10357, 10686, 11120, 11561, 12387,
-  12723, 13550, 13889, 13951, 13988, 14142, 14176, 14200, 14256, 14280,
-  14293, 14317, 14327, 14478, 14496, 14582, 14686, 14812, 14888, 14894,
-  14908, 14920, 14952, 14964, 14981, 14982, 14985, 14991, 14994, 14996,
-  15000, 15003, 15006, 15007, 15014, 15020, 15023, 15036, 15054, 15055,
-  15062, 15078, 15084, 15085, 15086, 15100, 15160, 15214, 15221, 15232,
-  15234, 15283, 15285, 15287, 15304, 15305, 15307, 15309, 15327, 15330,
-  15335, 15336, 15337, 15339, 15342, 15346, 15359, 15361, 15366, 15380,
-  15381, 15394, 15395, 15405, 15406, 15409, 15416, 15418, 15419, 15423,
-  15424, 15426, 15429, 15441, 15442, 15448, 15465, 15480, 15485, 15488,
-  15490, 15493, 15497, 15506, 15529, 15536, 15553, 15577, 15583.
+  12515, 12723, 13550, 13889, 13951, 13988, 14142, 14176, 14200, 14256,
+  14280, 14293, 14317, 14327, 14478, 14496, 14582, 14686, 14812, 14888,
+  14894, 14908, 14920, 14952, 14964, 14981, 14982, 14985, 14991, 14994,
+  14996, 15000, 15003, 15006, 15007, 15014, 15020, 15023, 15036, 15054,
+  15055, 15062, 15078, 15084, 15085, 15086, 15100, 15160, 15214, 15221,
+  15232, 15234, 15283, 15285, 15287, 15304, 15305, 15307, 15309, 15327,
+  15330, 15335, 15336, 15337, 15339, 15342, 15346, 15359, 15361, 15366,
+  15380, 15381, 15394, 15395, 15405, 15406, 15409, 15416, 15418, 15419,
+  15423, 15424, 15426, 15429, 15441, 15442, 15448, 15465, 15480, 15485,
+  15488, 15490, 15493, 15497, 15506, 15529, 15536, 15553, 15577, 15583.
 
 * CVE-2013-0242 Buffer overrun in regexp matcher has been fixed (Bugzilla
   #15078).
@@ -41,6 +41,8 @@ Version 2.18
 
 * New <math.h> macro named issignaling to check for a signaling NaN (sNaN).
   It is based on draft TS 18661 and currently enabled as a GNU extension.
+
+* Improved precision of the clock() function on Linux.
 
 Version 2.17
 
diff --git a/sysdeps/unix/sysv/linux/clock.c b/sysdeps/unix/sysv/linux/clock.c
index 5268d33..16036bd 100644
--- a/sysdeps/unix/sysv/linux/clock.c
+++ b/sysdeps/unix/sysv/linux/clock.c
@@ -1,4 +1,5 @@
-/* Copyright (C) 1991-2013 Free Software Foundation, Inc.
+/* Return the time used by the program so far (user time + system time).
+   Copyright (C) 1991-2013 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
@@ -19,26 +20,21 @@
 #include <time.h>
 #include <unistd.h>
 
-/* Return the time used by the program so far (user time + system time).  */
+#if CLOCKS_PER_SEC != 1000000l
+# error "CLOCKS_PER_SEC should be 1000000"
+#endif
+
 clock_t
 clock (void)
 {
-  struct tms buf;
-  long clk_tck = __sysconf (_SC_CLK_TCK);
-
-  /* We don't check for errors here.  The only error the kernel
-     returns is EFAULT if the value cannot be written to the struct we
-     pass a pointer to.  Otherwise the kernel returns an `unsigned
-     long' value which is the number of jiffies since system start.
-     But this number can be negative (when read as `long') when the
-     system is up for some time.  Ignoring errors should therefore
-     have no negative impacts but solve the problem.  */
-  __times (&buf);
-
-  return
-    (clk_tck <= CLOCKS_PER_SEC)
-    ? ((unsigned long) buf.tms_utime + buf.tms_stime) * (CLOCKS_PER_SEC
-							 / clk_tck)
-    : ((unsigned long) buf.tms_utime + buf.tms_stime) / (clk_tck
-							 / CLOCKS_PER_SEC);
+  struct timespec ts;
+
+  /* clock_gettime shouldn't fail here since CLOCK_PROCESS_CPUTIME_ID is
+     supported since 2.6.12.  Check the return value anyway in case the kernel
+     barfs on us for some reason.  */
+  if (__glibc_unlikely (__clock_gettime (CLOCK_PROCESS_CPUTIME_ID, &ts) != 0))
+    return (clock_t) -1;
+
+  return (ts.tv_sec * CLOCKS_PER_SEC
+	  + ts.tv_nsec / (1000000000 / CLOCKS_PER_SEC));
 }

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

Summary of changes:
 ChangeLog                       |    6 ++++++
 NEWS                            |   22 ++++++++++++----------
 sysdeps/unix/sysv/linux/clock.c |   36 ++++++++++++++++--------------------
 3 files changed, 34 insertions(+), 30 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]