From 47828911ae88038eda1051cfa2232f46eda95fd8 Mon Sep 17 00:00:00 2001 From: "Andrew J. Schorr" Date: Thu, 28 Jun 2012 10:37:36 -0400 Subject: Protect against race condition in test/time.awk. --- test/ChangeLog | 5 +++++ test/time.awk | 14 ++++++++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) (limited to 'test') diff --git a/test/ChangeLog b/test/ChangeLog index a0f7a649..057434f9 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,3 +1,8 @@ +2012-06-28 Andrew J. Schorr + + * time.awk: Avoid possibly throwing a spurious error by protecting + a race condition that depends on the order of expression evaluation. + 2012-06-25 Arnold D. Robbins * Makefile.am (rwarray): New test. diff --git a/test/time.awk b/test/time.awk index eeabc7bb..517377e2 100644 --- a/test/time.awk +++ b/test/time.awk @@ -1,10 +1,20 @@ @load "time" +# make sure gettimeofday() is consistent with systime(). We must call +# gettimeofday() before systime() to make sure the subtraction gives 0 +# without risk of rolling over to the next second. +function timecheck(st,res) { + res = gettimeofday() + st = systime() + printf "gettimeofday - systime = %d\n", res-st + return res +} + BEGIN { delta = 1.3 - printf "gettimeofday - systime = %d\n", (t0 = gettimeofday())-systime() + t0 = timecheck() printf "sleep(%s) = %s\n",delta,sleep(delta) - printf "gettimeofday - systime = %d\n", (t1 = gettimeofday())-systime() + t1 = timecheck() slept = t1-t0 if ((slept < 0.9*delta) || (slept > 1.3*delta)) printf "Warning: tried to sleep %.2f secs, but slept for %.2f secs\n", -- cgit v1.2.3