The previous trap handler didn't properly handle errors. It could leave
extra tasks around if the group was frozen or checkpoint-done hadn't
been touched. Add code to handle the errors as a special do_err()
function so that we don't bother the body of the test loop very much.

We use an error message to indicate if the problem seems to be a test
failure ("FAIL") or if it's probably the test itself that is broken
("BROK"). This means we don't constantly need to change the trap
-- just assign a different value to err_msg before and after executing
the interesting parts of the test.

We also need to recover if the cgroup has been frozen. Add that to the
trap temporarily.

Also, to avoid spurious messages about "break" only being valid inside
a loop, reset the trap after exiting the loop.

Signed-off-by: Matt Helsley <[email protected]>
Cc: [email protected]
---
 futex/run.sh |   24 ++++++++++++++++++++++--
 1 files changed, 22 insertions(+), 2 deletions(-)

diff --git a/futex/run.sh b/futex/run.sh
index e54c228..434a844 100755
--- a/futex/run.sh
+++ b/futex/run.sh
@@ -37,12 +37,27 @@ fi
 # mkdir /cg/1
 # chown -R $(id --name -u).$(id --name -g) /cg/1
 
+# Most failures indicate a broken test environment
+err_msg="BROK"
+function do_err()
+{
+       if [ -n "${TEST_PID}" ]; then
+               local PIDLIST=( $(ps --ppid ${TEST_PID} -o pid=) ${TEST_PID} )
+               kill ${pidli...@]}
+       fi
+       echo "${err_msg}"
+       ((failed++))
+       wait
+}
+
+failed=0
+
 numtests=${#tes...@]}
 CURTEST=0
 
 while [ $CURTEST -lt $NUMTESTS ]; do
        T=${TESTS[$CURTEST]}
-       trap 'break' ERR EXIT
+       trap 'do_err; break' ERR EXIT
        rm -f ./checkpoint-* TBROK
        echo "Running test: ${T}"
        ./${T} &
@@ -51,8 +66,12 @@ while [ $CURTEST -lt $NUMTESTS ]; do
                sleep 1
        done
        freeze
+       trap 'thaw; do_err; break' ERR EXIT
+       err_msg="FAIL"
        ckpt ${TEST_PID} > checkpoint-${T}
+       err_msg="BROK"
        thaw
+       trap 'do_err; break' ERR EXIT
        touch "./checkpoint-done"
        wait ${TEST_PID}
        retval=$?
@@ -78,9 +97,10 @@ while [ $CURTEST -lt $NUMTESTS ]; do
        else
                echo PASS
        fi
-       trap "" ERR EXIT
+       trap '' ERR EXIT
        CURTEST=$((CURTEST+1))
 done
+trap '' ERR EXIT
 
 #rm -f ./checkpoint-*
 
-- 
1.5.6.3


_______________________________________________
Containers mailing list
[email protected]
https://lists.linux-foundation.org/mailman/listinfo/containers

_______________________________________________
Devel mailing list
[email protected]
https://openvz.org/mailman/listinfo/devel

Reply via email to