X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fcore%2Fmanager.c;h=c99a022cd5390ffc42d66848c223d3c4d6f0ab8a;hb=e48614c4b268d9e7ecbd478d1d2410f9e92095e0;hp=b45a2e11a5a1cde016bd0b529e9468fc33346a10;hpb=51d122af23533b0b8318911c4fc8b128ad8eafb7;p=elogind.git diff --git a/src/core/manager.c b/src/core/manager.c index b45a2e11a..c99a022cd 100644 --- a/src/core/manager.c +++ b/src/core/manager.c @@ -486,6 +486,7 @@ static int manager_default_environment(Manager *m) { int manager_new(SystemdRunningAs running_as, bool reexecuting, Manager **_m) { Manager *m; int r = -ENOMEM; + bool try_bus_connect = false; assert(_m); assert(running_as >= 0); @@ -557,15 +558,18 @@ int manager_new(SystemdRunningAs running_as, bool reexecuting, Manager **_m) { if (r < 0) goto fail; - /* Try to connect to the busses, if possible. */ - if ((running_as == SYSTEMD_USER && getenv("DBUS_SESSION_BUS_ADDRESS")) || - running_as == SYSTEMD_SYSTEM) { - r = bus_init(m, reexecuting || running_as != SYSTEMD_SYSTEM); - if (r < 0) - goto fail; - } else + if (running_as == SYSTEMD_SYSTEM) + try_bus_connect = reexecuting; + else if (getenv("DBUS_SESSION_BUS_ADDRESS")) + try_bus_connect = true; + else log_debug("Skipping DBus session bus connection attempt - no DBUS_SESSION_BUS_ADDRESS set..."); + /* Try to connect to the busses, if possible. */ + r = bus_init(m, try_bus_connect); + if (r < 0) + goto fail; + m->taint_usr = dir_is_empty("/usr") > 0; *_m = m; @@ -672,7 +676,7 @@ static unsigned manager_dispatch_gc_queue(Manager *m) { unit_gc_sweep(u, gc_marker); - LIST_REMOVE(Unit, gc_queue, m->gc_queue, u); + LIST_REMOVE(gc_queue, m->gc_queue, u); u->in_gc_queue = false; n++; @@ -796,7 +800,7 @@ int manager_enumerate(Manager *m) { return r; } -int manager_coldplug(Manager *m) { +static int manager_coldplug(Manager *m) { int r = 0, q; Iterator i; Unit *u; @@ -876,6 +880,29 @@ fail: m->unit_path_cache = NULL; } + +static int manager_distribute_fds(Manager *m, FDSet *fds) { + Unit *u; + Iterator i; + int r; + + assert(m); + + HASHMAP_FOREACH(u, m->units, i) { + + if (fdset_size(fds) <= 0) + break; + + if (UNIT_VTABLE(u)->distribute_fds) { + r = UNIT_VTABLE(u)->distribute_fds(u, fds); + if (r < 0) + return r; + } + } + + return 0; +} + int manager_startup(Manager *m, FILE *serialization, FDSet *fds) { int r, q; @@ -1183,7 +1210,7 @@ void manager_clear_jobs(Manager *m) { job_finish_and_invalidate(j, JOB_CANCELED, false); } -unsigned manager_dispatch_run_queue(Manager *m) { +static unsigned manager_dispatch_run_queue(Manager *m) { Job *j; unsigned n = 0; @@ -1211,7 +1238,7 @@ unsigned manager_dispatch_run_queue(Manager *m) { return n; } -unsigned manager_dispatch_dbus_queue(Manager *m) { +static unsigned manager_dispatch_dbus_queue(Manager *m) { Job *j; Unit *u; unsigned n = 0; @@ -1762,7 +1789,7 @@ static int process_event(Manager *m, struct epoll_event *ev) { } case WATCH_IDLE_PIPE: { - m->no_console_output = true; + m->no_console_output = m->n_on_console > 0; manager_unwatch_idle_pipe(m); close_idle_pipe(m); @@ -1792,7 +1819,7 @@ int manager_loop(Manager *m) { manager_check_finished(m); /* There might still be some zombies hanging around from - * before we were exec()'ed. Leat's reap them */ + * before we were exec()'ed. Let's reap them. */ r = manager_dispatch_sigchld(m); if (r < 0) return r; @@ -2058,7 +2085,7 @@ void manager_dispatch_bus_query_pid_done( int manager_open_serialization(Manager *m, FILE **_f) { char *path = NULL; - int fd; + int fd = -1; FILE *f; assert(_f); @@ -2294,28 +2321,6 @@ finish: return r; } -int manager_distribute_fds(Manager *m, FDSet *fds) { - Unit *u; - Iterator i; - int r; - - assert(m); - - HASHMAP_FOREACH(u, m->units, i) { - - if (fdset_size(fds) <= 0) - break; - - if (UNIT_VTABLE(u)->distribute_fds) { - r = UNIT_VTABLE(u)->distribute_fds(u, fds); - if (r < 0) - return r; - } - } - - return 0; -} - int manager_reload(Manager *m) { int r, q; _cleanup_fclose_ FILE *f = NULL;