Commit 21256a2b authored by Lennart Poettering's avatar Lennart Poettering
Browse files

unit: don't accidently create ordering links to targets when default deps are...

unit: don't accidently create ordering links to targets when default deps are off for either target and unit
parent d4a7e06d
......@@ -53,9 +53,19 @@ static void target_set_state(Target *t, TargetState state) {
}
static int target_add_default_dependencies(Target *t) {
static const UnitDependency deps[] = {
UNIT_REQUIRES,
UNIT_REQUIRES_OVERRIDABLE,
UNIT_REQUISITE,
UNIT_REQUISITE_OVERRIDABLE,
UNIT_WANTS,
UNIT_BIND_TO
};
Iterator i;
Unit *other;
int r;
unsigned k;
assert(t);
......@@ -64,17 +74,10 @@ static int target_add_default_dependencies(Target *t) {
* ordering manually we won't add anything in here to make
* sure we don't create a loop. */
SET_FOREACH(other, t->meta.dependencies[UNIT_REQUIRES], i)
if ((r = unit_add_default_target_dependency(other, UNIT(t))) < 0)
return r;
SET_FOREACH(other, t->meta.dependencies[UNIT_REQUIRES_OVERRIDABLE], i)
if ((r = unit_add_default_target_dependency(other, UNIT(t))) < 0)
return r;
SET_FOREACH(other, t->meta.dependencies[UNIT_WANTS], i)
if ((r = unit_add_default_target_dependency(other, UNIT(t))) < 0)
return r;
for (k = 0; k < ELEMENTSOF(deps); k++)
SET_FOREACH(other, t->meta.dependencies[deps[k]], i)
if ((r = unit_add_default_target_dependency(other, UNIT(t))) < 0)
return r;
/* Make sure targets are unloaded on shutdown */
return unit_add_dependency_by_name(UNIT(t), UNIT_CONFLICTS, SPECIAL_SHUTDOWN_TARGET, NULL, true);
......
......@@ -742,6 +742,12 @@ int unit_add_default_target_dependency(Unit *u, Unit *target) {
target->meta.load_state != UNIT_LOADED)
return 0;
/* If either side wants no automatic dependencies, then let's
* skip this */
if (!u->meta.default_dependencies ||
target->meta.default_dependencies)
return 0;
/* Don't create loops */
if (set_get(target->meta.dependencies[UNIT_BEFORE], u))
return 0;
......@@ -750,27 +756,24 @@ int unit_add_default_target_dependency(Unit *u, Unit *target) {
}
static int unit_add_default_dependencies(Unit *u) {
static const UnitDependency deps[] = {
UNIT_REQUIRED_BY,
UNIT_REQUIRED_BY_OVERRIDABLE,
UNIT_WANTED_BY,
UNIT_BOUND_BY
};
Unit *target;
Iterator i;
int r;
unsigned k;
assert(u);
SET_FOREACH(target, u->meta.dependencies[UNIT_REQUIRED_BY], i)
if ((r = unit_add_default_target_dependency(u, target)) < 0)
return r;
SET_FOREACH(target, u->meta.dependencies[UNIT_REQUIRED_BY_OVERRIDABLE], i)
if ((r = unit_add_default_target_dependency(u, target)) < 0)
return r;
SET_FOREACH(target, u->meta.dependencies[UNIT_WANTED_BY], i)
if ((r = unit_add_default_target_dependency(u, target)) < 0)
return r;
SET_FOREACH(target, u->meta.dependencies[UNIT_BOUND_BY], i)
if ((r = unit_add_default_target_dependency(u, target)) < 0)
return r;
for (k = 0; k < ELEMENTSOF(deps); k++)
SET_FOREACH(target, u->meta.dependencies[deps[k]], i)
if ((r = unit_add_default_target_dependency(u, target)) < 0)
return r;
return 0;
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment