From: Luca Boccassi Date: Tue, 19 May 2026 21:00:58 +0000 (+0100) Subject: test: fix race in TEST-07-PID1.socket-on-failure.sh X-Git-Tag: v261-rc1~83^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fc0bd373ef3bd1681f135451648297c6b3189019;p=thirdparty%2Fsystemd.git test: fix race in TEST-07-PID1.socket-on-failure.sh The test waited for the OnFailure= service's filesystem side effect (`rmdir` of the directory) and then immediately invoked `systemctl is-active`. Between `rmdir(2)` returning (which causes the shell loop to exit) and PID1 reaping the child and transitioning the oneshot service from `activating` to `active`, there is a small window where `is-active` can observe `activating` and fail the test. Wait directly on the unit state instead, matching the pattern used a few lines above for the `is-failed` case. [ 1880.326704] TEST-07-PID1.sh[21489]: + timeout --foreground 60 bash -c 'while [[ -d '\''/tmp/TEST-07-PID1-socket-8467/test'\'' ]]; do sleep .5; done' [ 1880.330482] TEST-07-PID1.sh[21489]: + [[ ! -e /tmp/TEST-07-PID1-socket-8467/test ]] [ 1880.330482] TEST-07-PID1.sh[21489]: + systemctl is-active TEST-07-PID1-socket-OnFailure.service [ 1880.347470] TEST-07-PID1.sh[21520]: activating [ 1880.349508] TEST-07-PID1.sh[21489]: + at_exit [ 1880.349508] TEST-07-PID1.sh[21489]: + systemctl stop TEST-07-PID1-socket-8467.socket [ 1880.367331] TEST-07-PID1.sh[107]: Subtest /usr/lib/systemd/tests/testdata/units/TEST-07-PID1.socket-on-failure.sh failed [ 1880.367331] TEST-07-PID1.sh[107]: + return 1 Co-developed-by: Claude Opus 4.7 --- diff --git a/test/units/TEST-07-PID1.socket-on-failure.sh b/test/units/TEST-07-PID1.socket-on-failure.sh index 44b8a43634f..ff947b10e26 100755 --- a/test/units/TEST-07-PID1.socket-on-failure.sh +++ b/test/units/TEST-07-PID1.socket-on-failure.sh @@ -65,9 +65,8 @@ mkdir "/tmp/$UNIT_NAME/test" systemctl is-failed "$UNIT_NAME.socket" assert_eq "$(systemctl show "$UNIT_NAME.socket" -P SubState)" "failed" -timeout --foreground 60 bash -c "while [[ -d '/tmp/$UNIT_NAME/test' ]]; do sleep .5; done" +timeout --foreground 60 bash -c "until systemctl is-active TEST-07-PID1-socket-OnFailure.service; do sleep .5; done" [[ ! -e "/tmp/$UNIT_NAME/test" ]] -systemctl is-active TEST-07-PID1-socket-OnFailure.service systemctl start "$UNIT_NAME.socket" systemctl is-active "$UNIT_NAME.socket"