[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, ×pec) == 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