On 11/09/2026 07:26, Collin Funk wrote:
On GNU/Hurd, this test would get stuck in an infinite loop like the
following:

     + kill -s INFO 16535
     + sleep .01
     + kill -s INFO 16535
     + sleep .01
     + kill -s INFO 16535
     + sleep .01
     [...]

The signals being sent that frequently seem to prevent 'dd' from
performing writes, since it outputs the following during that time:

     0+0 records in
     0+0 records out
     0 bytes copied, 7161.11 s, 0.0 kB/s
     0+0 records in
     0+0 records out
     0 bytes copied, 7161.88 s, 0.0 kB/s
     [...]

* tests/dd/stats.sh: Use a larger interval between signals on GNU/Hurd.
---
  tests/dd/stats.sh | 12 +++++++++++-
  1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/tests/dd/stats.sh b/tests/dd/stats.sh
index db650f80d..da9bea774 100755
--- a/tests/dd/stats.sh
+++ b/tests/dd/stats.sh
@@ -37,6 +37,16 @@ cleanup_()
    wait
  }
+# On GNU/Hurd, sending a signal every .01 seconds would lead to an
+# infinite loop with zero bytes being written.  Doubling the interval
+# to .02 seconds works fine.  Keep the smaller on other platforms where
+# it doesn't cause issues.
+if test "$(uname)" = GNU; then
+  siginfo_interval=.02
+else
+  siginfo_interval=.01
+fi
+
  for open in '' '1'; do
    > err || framework_failure_
@@ -56,7 +66,7 @@ for open in '' '1'; do
    # to race setting handler, or blocking on open of fifo.
    # Many signals also check that short reads are handled.
    until ! kill -s $SIGINFO $pid 2>/dev/null; do
-    sleep .01
+    sleep $siginfo_interval
    done
wait

That shouldn't cause any issues elsewhere so it's good to push,
but we might look at making that test more robust after release.

cheers,
Padraig

Reply via email to