v="$1"
shift
+ local ulimit_start_=$(date +%s) || skip_ 'ulimit: date error'
+
(
# Try to disable core dumps which may
# occur with memory constraints
ulimit -v $v && "$@"
) >/dev/null 2>&1
+
+ ret=$?
+
+ local ulimit_end_=$(date +%s) || skip_ 'ulimit: date error'
+
+ # This can happen on Solaris 11 at least where fork() can give EAGAIN
+ # and bash will retry for at least 16 seconds
+ test $(($ulimit_end_ - $ulimit_start_)) -ge 10 && skip_ 'ulimit too slow'
+
+ return $ret
}
# Determine the minimum required VM limit to run the given command.
page_size=$(($page_size / 1024))
for v in $( seq 5000 5000 50000 ); do
- if ulimit_supported_ $v "$@"; then
+ ulimit_supported_ $v "$@"; ret=$?
+ test $ret = 77 && break;
+ if test $ret = 0; then
local prev_v
prev_v=$v
for v in $( seq $(($prev_v-1000)) -1000 1000 ); do
- ulimit_supported_ $v "$@" ||
+ ulimit_supported_ $v "$@"; ret=$?
+ test $ret = 77 && break 2;
+ test $ret = 0 ||
{
ret_v=$((prev_v + $page_size))
echo $ret_v
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_