X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fcore%2Funit.c;h=092673256d550dc42d9c25028651adcd9ca2880a;hp=b68796a9414a4acc6009e471e264d2e24e19ae1a;hb=e66047ff62c971eefa32b42373420d61e3f2a9c1;hpb=17a6dfa3be0ac9d9b84b57c8af66515b573fc1a4 diff --git a/src/core/unit.c b/src/core/unit.c index b68796a94..092673256 100644 --- a/src/core/unit.c +++ b/src/core/unit.c @@ -597,14 +597,22 @@ static void merge_dependencies(Unit *u, Unit *other, UnitDependency d) { UnitDependency k; for (k = 0; k < _UNIT_DEPENDENCY_MAX; k++) { - r = set_remove_and_put(back->dependencies[k], other, u); - if (r == -EEXIST) + /* Do not add dependencies between u and itself */ + if (back == u) { set_remove(back->dependencies[k], other); - else - assert(r >= 0 || r == -ENOENT); + } else { + r = set_remove_and_put(back->dependencies[k], other, u); + if (r == -EEXIST) + set_remove(back->dependencies[k], other); + else + assert(r >= 0 || r == -ENOENT); + } } } + /* Also do not move dependencies on u to itself */ + set_remove(other->dependencies[d], u); + complete_move(&u->dependencies[d], &other->dependencies[d]); set_free(other->dependencies[d]);