]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
test: avoid leaking open loop devices
authorLuca Boccassi <luca.boccassi@microsoft.com>
Tue, 16 Feb 2021 23:47:34 +0000 (23:47 +0000)
committerLennart Poettering <lennart@poettering.net>
Wed, 17 Feb 2021 17:55:05 +0000 (18:55 +0100)
When a subshell is used ('make' or 'make all') the LOOPDEV environment
variable, which is used to store the opened loop device, is lost.
So the cleanup on trap/exit doesn't do anything, and the loop
device used to mount the test image is left around.

Avoid using a subshell to fix the issue.

test/test-functions

index 7b8a1a32077ee4c0ff5b7cc57dcb4ad9482efdd6..39df122ef23922645971a1983efc68af55fe7bbb 100644 (file)
@@ -2320,11 +2320,15 @@ do_test() {
             --all)
                 ret=0
                 echo -n "${testname}: $TEST_DESCRIPTION "
-                (
-                    test_setup
-                    test_setup_cleanup
-                    test_run "$2"
-                ) </dev/null >"$TESTLOG" 2>&1 || ret=$?
+                # Do not use a subshell, otherwise cleanup variables (LOOPDEV) will be lost
+                # and loop devices will leak
+                test_setup </dev/null >"$TESTLOG" 2>&1 || ret=$?
+                if [ $ret -eq 0 ]; then
+                    test_setup_cleanup </dev/null >>"$TESTLOG" 2>&1 || ret=$?
+                fi
+                if [ $ret -eq 0 ]; then
+                    test_run "$2" </dev/null >>"$TESTLOG" 2>&1 || ret=$?
+                fi
                 test_cleanup
                 if [ $ret -eq 0 ]; then
                     rm "$TESTLOG"