diff options
author | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2020-08-03 11:39:25 +0200 |
---|---|---|
committer | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2020-08-04 20:33:24 +0200 |
commit | 2bbd33e476ace7cb2fb84e9b44167b00a51cc492 (patch) | |
tree | 4bf90a3837c51469ad699a9f64802cae8bfedfb3 | |
parent | b81504a3c76bfb3afd339cb74988892f9dccedd1 (diff) | |
download | systemd-2bbd33e476ace7cb2fb84e9b44167b00a51cc492.tar.gz |
core: reset bus error before reuse
From a report in https://bugzilla.redhat.com/show_bug.cgi?id=1861463:
usb-gadget.target: Failed to load configuration: No such file or directory
usb-gadget.target: Failed to load configuration: No such file or directory
usb-gadget.target: Trying to enqueue job usb-gadget.target/start/fail
usb-gadget.target: Failed to load configuration: No such file or directory
Assertion '!bus_error_is_dirty(e)' failed at src/libsystemd/sd-bus/bus-error.c:239, function bus_error_setfv(). Ignoring.
sys-devices-platform-soc-2100000.bus-2184000.usb-ci_hdrc.0-udc-ci_hdrc.0.device: Failed to enqueue SYSTEMD_WANTS= job, ignoring: Unit usb-gadget.target not found.
I *think* this is the place where the reuse occurs: we call
bus_unit_validate_load_state(unit, e) twice in a row.
(cherry picked from commit 94efaa31812f664f0ad659f474db3da0f9c9bacd)
-rw-r--r-- | src/core/transaction.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/src/core/transaction.c b/src/core/transaction.c index 4a57b8e3f9..958243bc94 100644 --- a/src/core/transaction.c +++ b/src/core/transaction.c @@ -966,6 +966,7 @@ int transaction_add_job_and_dependencies( * Given building up the transaction is a synchronous operation, attempt * to load the unit immediately. */ if (r < 0 && manager_unit_file_maybe_loadable_from_cache(unit)) { + sd_bus_error_free(e); unit->load_state = UNIT_STUB; r = unit_load(unit); if (r < 0 || unit->load_state == UNIT_STUB) |