changeset 17700:a2f13d7d07b3

times: fix to return non constant value on MS-Windows The existing implementation of times() for MS-Windows uses the process creation time returned by the GetProcessTimes API to construct the value that the function should return, which has two problems: The value is constant: every call to 'times' within the same process returns the same value. Callers generally expect the value to change, since Posix says the value is the elapsed time since some arbitrary point in time, and that point doesn't change for function calls in the same process. For example, Guile's test suite includes a test that calls 'times', sleeps for a few seconds, then calls 'times' again, and expects the return value to change according to approximately the number of seconds it slept. The value overflows the clock_t data type (which is 32 bits wide), because its point of origin is Jan 1, 1601. This is unnecessary, since the point of origin can change from process to process. * lib/times.c (times): Don't use the process creation time, rather clock() which on windows returns the number of clock ticks since the process started.
author Eli Zaretskii <eliz@gnu.org>
date Tue, 10 Jun 2014 21:22:16 +0100
parents 36e26a0e7826
children e41f2cd61471
files ChangeLog lib/times.c
diffstat 2 files changed, 8 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Mon Jun 09 17:07:44 2014 +0100
+++ b/ChangeLog	Tue Jun 10 21:22:16 2014 +0100
@@ -1,3 +1,10 @@
+2014-06-10  Eli Zaretskii  <eliz@gnu.org>
+
+	times: fix to return non constant value on MS-Windows
+	* lib/times.c (times): Don't use the process creation time,
+	rather clock() which on windows returns the number of
+	clock ticks since the process started.
+
 2014-06-09  Michael Goffioul  <michael.goffioul@gmail.com>
 
 	isatty: fix to work on windows 8
--- a/lib/times.c	Mon Jun 09 17:07:44 2014 +0100
+++ b/lib/times.c	Tue Jun 10 21:22:16 2014 +0100
@@ -62,5 +62,5 @@
   buffer->tms_cutime = 0;
   buffer->tms_cstime = 0;
 
-  return filetime2clock (creation_time);
+  return clock ();
 }