mirror of
https://github.com/torvalds/linux.git
synced 2026-06-04 20:46:48 +02:00
selftests: defer: Introduce DEFER_PAUSE_ON_FAIL
The fact that all cleanup (ideally) goes through the defer framework makes debugging of these commands a bit tricky. However, this also gives us a nice point to place a hook along the lines of PAUSE_ON_FAIL. When the environment variable DEFER_PAUSE_ON_FAIL is set, and a cleanup command results in non-zero exit status, show a bit of debuginfo and give the user an opportunity to interrupt the execution altogether. Signed-off-by: Petr Machata <petrm@nvidia.com> Acked-by: Nikolay Aleksandrov <razor@blackwall.org> Link: https://patch.msgid.link/2a07d24568ede6c42e4701657fa0b738e490fe59.1757004393.git.petrm@nvidia.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
d89d3b29ce
commit
ed07c8f2b8
|
|
@ -1,6 +1,10 @@
|
|||
#!/bin/bash
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
# Whether to pause and allow debugging when an executed deferred command has a
|
||||
# non-zero exit code.
|
||||
: "${DEFER_PAUSE_ON_FAIL:=no}"
|
||||
|
||||
# map[(scope_id,track,cleanup_id) -> cleanup_command]
|
||||
# track={d=default | p=priority}
|
||||
declare -A __DEFER__JOBS
|
||||
|
|
@ -38,8 +42,20 @@ __defer__run()
|
|||
local track=$1; shift
|
||||
local defer_ix=$1; shift
|
||||
local defer_key=$(__defer__defer_key $track $defer_ix)
|
||||
local ret
|
||||
|
||||
eval ${__DEFER__JOBS[$defer_key]}
|
||||
ret=$?
|
||||
|
||||
if [[ "$DEFER_PAUSE_ON_FAIL" == yes && "$ret" -ne 0 ]]; then
|
||||
echo "Deferred command (track $track index $defer_ix):"
|
||||
echo " ${__DEFER__JOBS[$defer_key]}"
|
||||
echo "... ended with an exit status of $ret"
|
||||
echo "Hit enter to continue, 'q' to quit"
|
||||
read a
|
||||
[[ "$a" == q ]] && exit 1
|
||||
fi
|
||||
|
||||
unset __DEFER__JOBS[$defer_key]
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user