]> git.ipfire.org Git - thirdparty/systemd.git/commit
core/transaction: do not override unit load state when unit_load() failed
authorYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 20 May 2025 19:38:07 +0000 (04:38 +0900)
committerLuca Boccassi <luca.boccassi@gmail.com>
Wed, 25 Jun 2025 12:36:10 +0000 (13:36 +0100)
commit0e5fc0a29c4a98f781d4d4911b5f589f31c9f10e
tree4904319b64bbe13455048dbfd7fb939e54bd07c1
parent915ffa770f3d65e28cf4ed8811140e9933eff242
core/transaction: do not override unit load state when unit_load() failed

When unit_load() failed for some reasons, previously we overrided the
load state with UNIT_NOT_FOUND, but we did not update the
Unit.fragment_not_found_timestamp_hash. So, the unit may be loaded
multiple times when the unit is in a dependency list of another unit,
as manager_unit_cache_should_retry_load() will be true again even on
next call.
Let's not override the unit state set by unit_load().

Note, after unit_load(), the unit state should not be UNIT_STUB.
Let's also add the assertion about that.

This change is important when combined with the next commit, as with the
next commit we will restart the FOREACH_UNIT_DEPENDENCY() loop if an unit
is reloaded, hence overriding load state with UNIT_NOT_FOUND may cause
infinit loop.

(cherry picked from commit 9b6aa9e443859f1eb69cfe37ca755ac4db31c475)
src/core/transaction.c