On 29/12/2025 03:48, Collin Funk wrote:
* tests/env/env-signal-handler.sh: Test that --ignore-signal with no
options also ignores real-time signals. Test that real-time signals can
be explicitly be ignored by listing them.
---
  tests/env/env-signal-handler.sh | 59 +++++++++++++++++++++++++++++++++
  1 file changed, 59 insertions(+)

diff --git a/tests/env/env-signal-handler.sh b/tests/env/env-signal-handler.sh
index 77d556457..d77f47a5a 100755
--- a/tests/env/env-signal-handler.sh
+++ b/tests/env/env-signal-handler.sh
@@ -19,6 +19,7 @@
  . "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
  print_ver_ env seq test timeout printf
  trap_sigpipe_or_skip_
+getlimits_
# /bin/sh has an intermittent failure in ignoring SIGPIPE on OpenIndiana 11
  # so we require bash as discussed at:
@@ -128,6 +129,64 @@ EOF
  timeout_sig=PIPE env_opt='--ignore-signal=PIPE' \
    retry_delay_ env_ignore_delay_ .1 6 || fail=1
+# If the system's signal.h defines SIGRTMIN and SIGRTMAX, assume that real-time
+# signals are supported.
+if test $SIGRTMIN -gt 0 && test $SIGRTMAX -gt $SIGRTMIN; then
+  # Find the lowest supported signal number used for real-time signals.
+  for i in $(seq $SIGRTMIN $SIGRTMAX); do
+    if test $i -eq $SIGRTMIN; then
+      sig=RTMIN
+    else
+      sig=RTMIN+$(($i - $SIGRTMIN))
+    fi
+    if kill -l $sig; then
+      rtmin_signal=$sig
+      break
+    fi
+  done
+
+  # Find the largest supported signal number used for real-time signals.
+  for i in $(seq $SIGRTMAX -1 $SIGRTMIN); do
+    if test $i -eq $SIGRTMAX; then
+      sig=RTMAX
+    else
+      sig=RTMAX-$(($SIGRTMAX - $i))
+    fi
+    if kill -l $sig; then
+      rtmax_signal=$sig
+      break
+    fi
+  done
+
+  # Fail if we could not find a supported real-time signal using 'kill'.
+  test -n "$rtmin_signal" && test -n "$rtmax_signal" || framework_failure_

Well all of the above is testing kill(1),
and posix doesn't specify name -> number support,
so I'm not sure framework_failure is appropriate here.

Couldn't we just exclude kill(1) here.
I.e., not do any of the above,
and just pass "RTMIN' and "RTMAX" to env, like:

if test $SIGRTMIN -gt 0 && test $SIGRTMAX -gt $SIGRTMIN; then
  for sig in 'RTMIN' 'RTMAX'; do
    ...
  done
fi

cheers,
Padraig

Reply via email to