tests: tail-2/infloop-1: avoid rare test failure on a busy system
authorJim Meyering <meyering@redhat.com>
Mon, 7 Sep 2009 09:39:19 +0000 (11:39 +0200)
committerJim Meyering <meyering@redhat.com>
Mon, 7 Sep 2009 11:55:37 +0000 (13:55 +0200)
* tests/tail-2/infloop-1: Sleep 3 seconds, not 1, but in increments
of 0.1 second.  Before, this test would fail ~1 time in 20 via
"make -j9 check" on a quad-core system.
Correct comment.

tests/tail-2/infloop-1

index 6a456de..72d51d9 100755 (executable)
@@ -27,16 +27,22 @@ yes > t &
 yes_pid=$!
 while :; do
   test -s t && break
+  sleep .1
 done
 tail -n 1 t &
 tail_pid=$!
 kill $yes_pid
 
 # This test is racy, and can fail under unusual circumstances.
-# On a busy system, "yes" will fail to write
-# (and hence fail to be killed by SIGPIPE) in that 1-second interval.
+# On a very busy system, tail will fail to notice that $yes_pid is gone.
 # Then the following kill will succeed and cause this test to fail.
-sleep 1
+
+# Wait for up to 3 seconds for tail to detect the death of $yes_pid.
+for i in $(seq 30); do
+    kill -0 $tail_pid || break
+    echo sleep 0.1s
+    sleep .1
+done
 
 fail=0
 kill $tail_pid && fail=1 || :