aboutsummaryrefslogtreecommitdiffstats
path: root/tests/test-runner
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test-runner')
-rw-r--r--tests/test-runner/include/logapi.shlib28
1 files changed, 23 insertions, 5 deletions
diff --git a/tests/test-runner/include/logapi.shlib b/tests/test-runner/include/logapi.shlib
index cd7982a94..3c8324d57 100644
--- a/tests/test-runner/include/logapi.shlib
+++ b/tests/test-runner/include/logapi.shlib
@@ -281,7 +281,23 @@ function log_pos
function log_onexit
{
- _CLEANUP="$@"
+ _CLEANUP=("$*")
+}
+
+# Push an exit handler on the cleanup stack
+#
+# $@ - function(s) to perform on exit
+
+function log_onexit_push
+{
+ _CLEANUP+=("$*")
+}
+
+# Pop an exit handler off the cleanup stack
+
+function log_onexit_pop
+{
+ _CLEANUP=("${_CLEANUP[@]:0:${#_CLEANUP[@]}-1}")
}
#
@@ -425,12 +441,14 @@ function _endlog
_execute_testfail_callbacks
fi
- if [[ -n $_CLEANUP ]] ; then
- typeset cleanup=$_CLEANUP
- log_onexit ""
+ typeset stack=("${_CLEANUP[@]}")
+ log_onexit ""
+ typeset i=${#stack[@]}
+ while (( i-- )); do
+ typeset cleanup="${stack[i]}"
log_note "Performing local cleanup via log_onexit ($cleanup)"
$cleanup
- fi
+ done
exit $exitcode
}