bug-make
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH 2/3] make -p uses same clock as rest of 'make'


From: Paul Eggert
Subject: [PATCH 2/3] make -p uses same clock as rest of 'make'
Date: Wed, 10 May 2023 12:10:15 -0700

Without this patch, the output of 'make -p' would generate output that
sometimes incorrectly implied that the clock jumped backwards.
* src/main.c (time_now): New function.
(print_data_base): Use it.
---
 src/main.c | 33 +++++++++++++++++++++++++++++++--
 1 file changed, 31 insertions(+), 2 deletions(-)

diff --git a/src/main.c b/src/main.c
index 76e392de..0f61b069 100644
--- a/src/main.c
+++ b/src/main.c
@@ -3732,12 +3732,41 @@ safer_ctime (time_t *t)
     return "(time out of range)\n";
 }
 
+static time_t
+time_now (void)
+{
+  /* Use an algorithm like file_timestamp_now's, extracting just the
+     seconds part of the timestamp.  This avoids a race that would
+     generate output that incorrectly makes it look like the system
+     clock jumped backwards on platforms like GNU/Linux where the
+     'time' function does not use the CLOCK_REALTIME clock and the two
+     clocks can disagree in their seconds component.  */
+#if FILE_TIMESTAMP_HI_RES
+# if HAVE_CLOCK_GETTIME && defined CLOCK_REALTIME
+  {
+    struct timespec timespec;
+    if (clock_gettime (CLOCK_REALTIME, &timespec) == 0)
+      return timespec.tv_sec;
+  }
+# endif
+# if HAVE_GETTIMEOFDAY
+  {
+    struct timeval timeval;
+    if (gettimeofday (&timeval, 0) == 0)
+      return timeval.tv_sec;
+  }
+# endif
+#endif
+
+  return time ((time_t *) 0);
+}
+
 /* Print a bunch of information about this and that.  */
 
 static void
 print_data_base (void)
 {
-  time_t when = time ((time_t *) 0);
+  time_t when = time_now ();
 
   print_version ();
 
@@ -3750,7 +3779,7 @@ print_data_base (void)
   print_vpath_data_base ();
   strcache_print_stats ("#");
 
-  when = time ((time_t *) 0);
+  when = time_now ();
   printf (_("\n# Finished Make data base on %s\n"), safer_ctime (&when));
 }
 
-- 
2.39.2




reply via email to

[Prev in Thread] Current Thread [Next in Thread]