diff options
author | Lennart Poettering <lennart@poettering.net> | 2015-05-19 17:40:50 +0200 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2015-05-19 17:48:12 +0200 |
commit | ce74e76920dca603a12ef4bf605567965e9e7e45 (patch) | |
tree | b2c3598b864eb44dbef7f4896d02639b1e4ae2f0 | |
parent | 55ede093a541eb94a24e6d643485f1a090e938f6 (diff) |
core: reinstate propagation of stop/restart jobs via RequsiteOf dependencies
This reverts the primary effect of be7d9ff730cb88d7c6a869dd5c47754c78ceaef2.
After all Requisite= should be close to Requires=, without the one
exception that it doesn't pull in dependencies on start. However,
reverse deps on stop/restart should be treated the same way as for
Restart=, and this is already documented in the man page, hence stick to
it.
http://lists.freedesktop.org/archives/systemd-devel/2015-May/032049.html
-rw-r--r-- | src/core/transaction.c | 42 |
1 files changed, 14 insertions, 28 deletions
diff --git a/src/core/transaction.c b/src/core/transaction.c index d1f7b7f2bf..223f691534 100644 --- a/src/core/transaction.c +++ b/src/core/transaction.c @@ -1030,40 +1030,26 @@ int transaction_add_job_and_dependencies( } if (type == JOB_STOP || type == JOB_RESTART) { + static const UnitDependency propagate_deps[] = { + UNIT_REQUIRED_BY, + UNIT_REQUISITE_OF, + UNIT_BOUND_BY, + UNIT_CONSISTS_OF, + }; - SET_FOREACH(dep, ret->unit->dependencies[UNIT_REQUIRED_BY], i) { - r = transaction_add_job_and_dependencies(tr, type, dep, ret, true, override, false, false, ignore_order, e); - if (r < 0) { - if (r != -EBADR) - goto fail; - - if (e) - sd_bus_error_free(e); - } - } - - SET_FOREACH(dep, ret->unit->dependencies[UNIT_BOUND_BY], i) { - r = transaction_add_job_and_dependencies(tr, type, dep, ret, true, override, false, false, ignore_order, e); - if (r < 0) { - if (r != -EBADR) - goto fail; + unsigned j; - if (e) - sd_bus_error_free(e); - } - } + for (j = 0; j < ELEMENTSOF(propagate_deps); j++) + SET_FOREACH(dep, ret->unit->dependencies[propagate_deps[j]], i) { - SET_FOREACH(dep, ret->unit->dependencies[UNIT_CONSISTS_OF], i) { - r = transaction_add_job_and_dependencies(tr, type, dep, ret, true, override, false, false, ignore_order, e); - if (r < 0) { - if (r != -EBADR) - goto fail; + r = transaction_add_job_and_dependencies(tr, type, dep, ret, true, override, false, false, ignore_order, e); + if (r < 0) { + if (r != -EBADR) + goto fail; - if (e) sd_bus_error_free(e); + } } - } - } if (type == JOB_RELOAD) { |