From 7e094b534978a8c5e980271a00ebccdba98ae6f7 Mon Sep 17 00:00:00 2001 From: Franck Bui Date: Wed, 15 Mar 2023 19:48:52 +0100 Subject: [PATCH 5001/5001] Revert "core: propagate stop too if restart is issued" This reverts commit 017a7ba4f406adcf69d6b3ec15b9f2d9ed5ad853. Until https://github.com/systemd/systemd/issues/26839 is properly fixed. --- src/core/transaction.c | 42 +++++++++++++++--------------------------- 1 file changed, 15 insertions(+), 27 deletions(-) diff --git a/src/core/transaction.c b/src/core/transaction.c index a6fd184e33..9689d5faab 100644 --- a/src/core/transaction.c +++ b/src/core/transaction.c @@ -1047,39 +1047,27 @@ int transaction_add_job_and_dependencies( } if (IN_SET(type, JOB_STOP, JOB_RESTART)) { - _cleanup_set_free_ Set *propagated_restart = NULL; + UnitDependencyAtom atom; + JobType ptype; + /* We propagate STOP as STOP, but RESTART only as TRY_RESTART, in order not to start * dependencies that are not around. */ + if (type == JOB_RESTART) { + atom = UNIT_ATOM_PROPAGATE_RESTART; + ptype = JOB_TRY_RESTART; + } else { + ptype = JOB_STOP; + atom = UNIT_ATOM_PROPAGATE_STOP; + } - if (type == JOB_RESTART) - UNIT_FOREACH_DEPENDENCY(dep, ret->unit, UNIT_ATOM_PROPAGATE_RESTART) { - JobType nt; - - r = set_ensure_put(&propagated_restart, NULL, dep); - if (r < 0) - return r; - - nt = job_type_collapse(JOB_TRY_RESTART, dep); - if (nt == JOB_NOP) - continue; - - r = transaction_add_job_and_dependencies(tr, nt, dep, ret, true, false, false, ignore_order, e); - if (r < 0) { - if (r != -EBADR) /* job type not applicable */ - return r; - - sd_bus_error_free(e); - } - } + UNIT_FOREACH_DEPENDENCY(dep, ret->unit, atom) { + JobType nt; - /* The 'stop' part of a restart job is also propagated to - * units with UNIT_ATOM_PROPAGATE_STOP */ - UNIT_FOREACH_DEPENDENCY(dep, ret->unit, UNIT_ATOM_PROPAGATE_STOP) { - /* Units experienced restart propagation are skipped */ - if (set_contains(propagated_restart, dep)) + nt = job_type_collapse(ptype, dep); + if (nt == JOB_NOP) continue; - r = transaction_add_job_and_dependencies(tr, JOB_STOP, dep, ret, true, false, false, ignore_order, e); + r = transaction_add_job_and_dependencies(tr, nt, dep, ret, true, false, false, ignore_order, e); if (r < 0) { if (r != -EBADR) /* job type not applicable */ return r; -- 2.35.3