]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
core: make sure targets that get a default Conflicts=shutdown.target are also ordered...
authorLennart Poettering <lennart@poettering.net>
Tue, 29 Nov 2016 20:07:05 +0000 (21:07 +0100)
committerMartin Pitt <martin.pitt@ubuntu.com>
Wed, 14 Dec 2016 09:13:52 +0000 (10:13 +0100)
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.)

src/core/target.c

index 765c1f3fa48c9f17eae3a7eb74c62793a63777ad..ff0d764fb5b7f5d16fa6b223ae42530db8762b3a 100644 (file)
@@ -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) {