summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2016-11-29 21:07:05 +0100
committerMartin Pitt <martin.pitt@ubuntu.com>2016-12-14 10:13:52 +0100
commit33e28180939bd1e71c3d8322b4e2c3fb338bc2fb (patch)
treee89570e3514366b3bb907278b723846e64fb91f7
parent4549fcdb1d1431a52c51fa8963a24dbb9f6ecaab (diff)
core: make sure targets that get a default Conflicts=shutdown.target are also ordered against it
Let's tweak the automatic dependency generation of target units: not only add a Conflicts= towards shutdown.target but also an After= line for it, so that we can be sure the new target is not started when the old target is still up. Discovered in the context of #4733 (Also, exclude dependency generation if for shutdown.target itself. — This is strictly speaking redundant, as unit_add_two_dependencies_by_name() detects that and becomes a NOP, but let's make this explicit for readability.)
-rw-r--r--src/core/target.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/core/target.c b/src/core/target.c
index 765c1f3fa4..ff0d764fb5 100644
--- a/src/core/target.c
+++ b/src/core/target.c
@@ -75,8 +75,11 @@ static int target_add_default_dependencies(Target *t) {
return r;
}
+ if (unit_has_name(UNIT(t), SPECIAL_SHUTDOWN_TARGET))
+ return 0;
+
/* Make sure targets are unloaded on shutdown */
- return unit_add_dependency_by_name(UNIT(t), UNIT_CONFLICTS, SPECIAL_SHUTDOWN_TARGET, NULL, true);
+ return unit_add_two_dependencies_by_name(UNIT(t), UNIT_BEFORE, UNIT_CONFLICTS, SPECIAL_SHUTDOWN_TARGET, NULL, true);
}
static int target_load(Unit *u) {