This avoids a test hang seen with bash on Solaris 11

* init.cfg (ulimit_supported_): Change to a wrapper
that uses timeout(1) with ...
* tests/ulimit_supported: ... a separated helper.
* tests/misc/write-errors.sh: Be more conservative
and skip the test if we fail to determine an
appropriate vm limit with ulimit -v.
---
 init.cfg                   | 20 ++++++++------------
 tests/misc/write-errors.sh |  2 +-
 tests/ulimit_supported     | 15 +++++++++++++++
 3 files changed, 24 insertions(+), 13 deletions(-)
 create mode 100755 tests/ulimit_supported

diff --git a/init.cfg b/init.cfg
index ae158c7a3..bdd001384 100644
--- a/init.cfg
+++ b/init.cfg
@@ -170,21 +170,17 @@ require_openat_support_()
   fi
 }
 
-# Return true if command runs with the
-# ulimit specified in the first argument
+# Return with command status
+# with ulimit specified in the first argument
 ulimit_supported_()
 {
-  local v
-  v="$1"
-  shift
-
-  (
-    # Try to disable core dumps which may
-    # occur with memory constraints
-    trap '' SEGV; ulimit -c 0;
+  # Wrap with timeout as on some systems (like Solaris 11)
+  # fork() can return EAGAIN under vm constraints,
+  # causing bash at least to loop retrying the fork
+  timeout 1 true >/dev/null ||
+    skip_ 'ulimit -v cannot be safely checked'
 
-    ulimit -v $v && "$@"
-  ) >/dev/null 2>&1
+  timeout 10 $SHELL "$abs_srcdir"/tests/ulimit_supported "$@"
 }
 
 # Determine the minimum required VM limit to run the given command.
diff --git a/tests/misc/write-errors.sh b/tests/misc/write-errors.sh
index 78379b542..13e6d11fa 100755
--- a/tests/misc/write-errors.sh
+++ b/tests/misc/write-errors.sh
@@ -62,7 +62,7 @@ while read writer; do
   cmd=$(printf '%s\n' "$writer" | cut -d ' ' -f1) || framework_failure_
   base_mem=$(get_min_ulimit_v_ $cmd --version) \
     && ulimit="ulimit -v $(($base_mem+8000))" \
-    || ulimit='true'
+    || skip_ 'unable to determine ulimit -v'
 
   # Check /dev/full handling
   rm -f full.err || framework_failure_
diff --git a/tests/ulimit_supported b/tests/ulimit_supported
new file mode 100755
index 000000000..cc89db871
--- /dev/null
+++ b/tests/ulimit_supported
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+# Return command status
+# with ulimit specified in the first argument
+
+v="$1"
+shift
+
+(
+  # Try to disable core dumps which may
+  # occur with memory constraints
+  trap '' SEGV; ulimit -c 0;
+
+  ulimit -v $v && "$@"
+) >/dev/null 2>&1
-- 
2.47.1


Reply via email to