summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Eggert <eggert@cs.ucla.edu>2023-04-01 16:44:03 -0700
committerPaul Eggert <eggert@cs.ucla.edu>2023-04-01 16:44:28 -0700
commit713d9822bbfb2923115065efaefed34a0113f8a1 (patch)
tree9c919574a18f3c9c90a1fdda625d36dcb49df328
parent05e295b60cfdf378b7ed8c1f8563a5644d5d4689 (diff)
downloadautoconf-713d9822bbfb2923115065efaefed34a0113f8a1.tar.gz
Fix timing bug on high-speed builds
Problem reported by Bogdan via Jacob Bachmeyer in: https://lists.gnu.org/r/autoconf/2023-04/msg00002.html * bin/autom4te.in: If a file timestamp equals a dependency’s timestamp, consider the file to be out of date. Although this may result in extra work, it fixes some rare timing bugs.
-rw-r--r--bin/autom4te.in12
1 files changed, 5 insertions, 7 deletions
diff --git a/bin/autom4te.in b/bin/autom4te.in
index 4b61f0a8..71d7e6a6 100644
--- a/bin/autom4te.in
+++ b/bin/autom4te.in
@@ -910,10 +910,8 @@ sub up_to_date ($)
return 0
if ! -f $tfile || ! -f $ofile;
- # The youngest of the cache files must be older than the oldest of
+ # The younger of the cache files must be older than the oldest of
# the dependencies.
- # FIXME: These timestamps have only 1-second resolution.
- # Time::HiRes fixes this, but assumes Perl 5.8 or later.
my $tmtime = mtime ($tfile);
my $omtime = mtime ($ofile);
my ($file, $mtime) = ($tmtime < $omtime
@@ -926,7 +924,7 @@ sub up_to_date ($)
# We depend at least upon the arguments.
foreach my $dep (@ARGV)
{
- if ($mtime < mtime ($dep))
+ if ($mtime <= mtime ($dep))
{
verb "up_to_date ($file): outdated: $dep";
return 0;
@@ -949,7 +947,7 @@ sub up_to_date ($)
# timestamp of that missing file was newer).
return 0
if ! $dep;
- if ($mtime < mtime ($dep))
+ if ($mtime <= mtime ($dep))
{
verb "up_to_date ($file): outdated: $dep";
return 0;
@@ -1038,7 +1036,7 @@ $icache_file = new Autom4te::XFile $icache, O_RDWR|O_CREAT;
$icache_file->lock (LOCK_EX)
if ($flock_implemented eq "yes");
-# Read the cache index if available and older than autom4te itself.
+# Read the cache index if available and younger than autom4te itself.
# If autom4te is younger, then some structures such as C4che might
# have changed, which would corrupt its processing.
Autom4te::C4che->load ($icache_file)
@@ -1105,7 +1103,7 @@ else
# Actual M4 expansion, if the user wants it, or if $output is old
# (STDOUT is pretty old).
handle_output ($req, $output)
- if $force || mtime ($output) < mtime ($ocache . $req->id);
+ if $force || mtime ($output) <= mtime ($ocache . $req->id);
}
# If we ran up to here, the cache is valid.