summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPádraig Brady <P@draigBrady.com>2012-01-04 23:33:20 +0000
committerPádraig Brady <P@draigBrady.com>2012-01-05 15:12:16 +0000
commit512662fb30c448ee6564050cfe45e6b865c1f435 (patch)
tree5c3bca6b60770e28cc615a1a3235d6268276f4bb
parent101a30a2a0f726ad0d4c4541b4e77eab3a1b7aa7 (diff)
downloadcoreutils-512662fb30c448ee6564050cfe45e6b865c1f435.tar.gz
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. * man/timeout.x: Mention the possible bug. Reported by Bruno Haible
-rw-r--r--man/timeout.x2
-rwxr-xr-xtests/misc/timeout-parameters37
2 files changed, 24 insertions, 15 deletions
diff --git a/man/timeout.x b/man/timeout.x
index 19ebed38a..41b429547 100644
--- a/man/timeout.x
+++ b/man/timeout.x
@@ -4,3 +4,5 @@ timeout \- run a command with a time limit
.\" Add any additional description here
[SEE ALSO]
kill(1)
+[BUGS]
+Some platforms don't curently support timeouts beyond 2038
diff --git a/tests/misc/timeout-parameters b/tests/misc/timeout-parameters
index fa380d74b..c7d663092 100755
--- a/tests/misc/timeout-parameters
+++ b/tests/misc/timeout-parameters
@@ -35,26 +35,33 @@ 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 checking large timeouts
+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
+
+ # floating point notation
+ timeout 2.34e+5d sleep 0
+ test $? = 0 || fail=1
+fi
# floating point notation
timeout 2.34 sleep 0
test $? = 0 || fail=1
-# floating point notation
-timeout 2.34e+5d sleep 0
-test $? = 0 || fail=1
-
# nanoseconds potentially supported
timeout .999999999 sleep 0 || fail=1