On 01/04/2012 10:59 PM, Bruno Haible wrote:
>>   http://meyering.net/cu/coreutils-8.14.116-1e18d.tar.xz
> 
> On Linux/hppa:
> 
> FAIL: misc/timeout-parameters
> 
> The test suite log shows this execution log:
> 
> + test 125 = 125
> + timeout 4294967296 sleep 0
> + test 124 = 0
> + fail=1
> ++ expr 4294967295 / 86400 + 1
> + timeout 49711d sleep 0
> + test 124 = 0
> + fail=1
> + timeout 999999999999999999999999999999999999999999999999999999999999d sleep 
> 0
> + test 124 = 0
> + fail=1
> + timeout 2.34 sleep 0
> + test 0 = 0
> + timeout 2.34e+5d sleep 0
> + test 124 = 0
> + fail=1
> 
> Earlier reported and analyzed at
> <http://lists.gnu.org/archive/html/coreutils/2011-10/msg00038.html>
> but no fix/workaround is present in coreutils.

Hopefully the attached avoids this.

cheers,
Pádraig.
>From c17f88d53d9e70c22643e8554b639093bbdac6b4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?P=C3=A1draig=20Brady?= <[email protected]>
Date: Wed, 4 Jan 2012 23:33:20 +0000
Subject: [PATCH] tests: avoid a false positive due to overflow on Linux/HPPA

* tests/misc/timeout-parameters: Verify that the timer doesn't
fire immediately in the problematic range, and avoid overflow
checks in that case.

Reported by Bruno Haible
---
 tests/misc/timeout-parameters |   29 ++++++++++++++++++-----------
 1 files changed, 18 insertions(+), 11 deletions(-)

diff --git a/tests/misc/timeout-parameters b/tests/misc/timeout-parameters
index fa380d7..fd796ad 100755
--- a/tests/misc/timeout-parameters
+++ b/tests/misc/timeout-parameters
@@ -35,17 +35,24 @@ test $? = 125 || fail=1
 timeout 42D sleep 0
 test $? = 125 || fail=1
 
-# timeout overflow
-timeout $UINT_OFLOW sleep 0
-test $? = 0 || fail=1
-
-# timeout overflow
-timeout $(expr $UINT_MAX / 86400 + 1)d sleep 0
-test $? = 0 || fail=1
-
-# timeout overflow
-timeout 999999999999999999999999999999999999999999999999999999999999d sleep 0
-test $? = 0 || fail=1
+# It was seen on 32 bit Linux/HPPA that a kernel time_t overflowed,
+# thus causing the timer to fire immediately.
+# So verify that doesn't happen before trying overflow checks
+KERNEL_OVERFLOW_LIMIT=$(expr $TIME_T_MAX - $(date +%s) + 100)
+timeout $KERNEL_OVERFLOW_LIMIT sleep 0
+if test $? != 124; then
+  # timeout overflow
+  timeout $UINT_OFLOW sleep 0
+  test $? = 0 || fail=1
+
+  # timeout overflow
+  timeout $(expr $UINT_MAX / 86400 + 1)d sleep 0
+  test $? = 0 || fail=1
+
+  # timeout overflow
+  timeout 999999999999999999999999999999999999999999999999999999999999d sleep 0
+  test $? = 0 || fail=1
+fi
 
 # floating point notation
 timeout 2.34 sleep 0
-- 
1.7.6.4

Reply via email to