X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fcore%2Funit.c;h=590ca3555a83a655f11f608c211db3de8cae5617;hb=98f738b62047229af4a929d7996e2ab04253b02c;hp=c3433b2c5d5e6c04d09765d4afe05cbfcc9dfdbf;hpb=5ffa8c818120e35c89becd938d160235c069dd12;p=elogind.git diff --git a/src/core/unit.c b/src/core/unit.c index c3433b2c5..590ca3555 100644 --- a/src/core/unit.c +++ b/src/core/unit.c @@ -19,12 +19,8 @@ along with systemd; If not, see . ***/ -#include #include #include -#include -#include -#include #include #include #include @@ -45,12 +41,10 @@ #include "cgroup-util.h" #include "missing.h" #include "mkdir.h" -#include "label.h" #include "fileio-label.h" #include "bus-common-errors.h" #include "dbus.h" #include "execute.h" -#include "virt.h" #include "dropin.h" const UnitVTable * const unit_vtable[_UNIT_TYPE_MAX] = { @@ -868,7 +862,7 @@ void unit_dump(Unit *u, FILE *f, const char *prefix) { assert(u->type >= 0); prefix = strempty(prefix); - prefix2 = strappenda(prefix, "\t"); + prefix2 = strjoina(prefix, "\t"); fprintf(f, "%s-> Unit %s:\n" @@ -1648,12 +1642,14 @@ static void unit_check_binds_to(Unit *u) { continue; stop = true; + break; } if (!stop) return; - log_unit_info(u->id, "Unit %s is bound to inactive service. Stopping, too.", u->id); + assert(other); + log_unit_info(u->id, "Unit %s is bound to inactive unit %s. Stopping, too.", u->id, other->id); /* A unit we need to run is gone. Sniff. Let's stop this. */ manager_add_job(u->manager, JOB_STOP, u, JOB_FAIL, true, NULL, NULL); @@ -2845,7 +2841,7 @@ int unit_add_node_link(Unit *u, const char *what, bool wants) { if (r < 0) return r; - r = unit_add_two_dependencies(u, UNIT_AFTER, UNIT_BINDS_TO, device, true); + r = unit_add_two_dependencies(u, UNIT_AFTER, u->manager->running_as == SYSTEMD_SYSTEM ? UNIT_BINDS_TO : UNIT_WANTS, device, true); if (r < 0) return r; @@ -3178,6 +3174,10 @@ int unit_patch_contexts(Unit *u) { r = get_home_dir(&ec->working_directory); if (r < 0) return r; + + /* Allow user services to run, even if the + * home directory is missing */ + ec->working_directory_missing_ok = true; } if (u->manager->running_as == SYSTEMD_USER &&