summaryrefslogtreecommitdiff
path: root/src/core/transaction.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2015-05-19 17:40:50 +0200
committerLennart Poettering <lennart@poettering.net>2015-05-19 17:48:12 +0200
commitce74e76920dca603a12ef4bf605567965e9e7e45 (patch)
treeb2c3598b864eb44dbef7f4896d02639b1e4ae2f0 /src/core/transaction.c
parent55ede093a541eb94a24e6d643485f1a090e938f6 (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
Diffstat (limited to 'src/core/transaction.c')
-rw-r--r--src/core/transaction.c42
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) {