X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fmanager.c;h=4a8408212a645cb2c33e6ee38989c439de5108b6;hb=2633eb8317623138f585957fcf8337a99fb1528f;hp=827e9937c65af551456a24142fd4851c84f6a72f;hpb=967072694d4ebb1b7c5989b92aa71af48954a975;p=elogind.git diff --git a/src/manager.c b/src/manager.c index 827e9937c..4a8408212 100644 --- a/src/manager.c +++ b/src/manager.c @@ -174,6 +174,8 @@ static int manager_setup_signals(Manager *m) { SIGRTMIN+14, /* systemd: Immediate poweroff */ SIGRTMIN+15, /* systemd: Immediate reboot */ SIGRTMIN+16, /* systemd: Immediate kexec */ + SIGRTMIN+20, /* systemd: enable status messages */ + SIGRTMIN+21, /* systemd: disable status messages */ -1); assert_se(sigprocmask(SIG_SETMASK, &mask, NULL) == 0); @@ -222,6 +224,9 @@ int manager_new(ManagerRunningAs running_as, Manager **_m) { if (!(m->environment = strv_copy(environ))) goto fail; + if (!(m->default_controllers = strv_new("cpu", NULL))) + goto fail; + if (!(m->units = hashmap_new(string_hash_func, string_compare_func))) goto fail; @@ -256,7 +261,7 @@ int manager_new(ManagerRunningAs running_as, Manager **_m) { goto fail; /* Try to connect to the busses, if possible. */ - if ((r = bus_init(m)) < 0) + if ((r = bus_init(m, running_as != MANAGER_SYSTEM)) < 0) goto fail; #ifdef HAVE_AUDIT @@ -461,6 +466,8 @@ void manager_free(Manager *m) { lookup_paths_free(&m->lookup_paths); strv_free(m->environment); + strv_free(m->default_controllers); + hashmap_free(m->cgroup_bondings); set_free_free(m->unit_path_cache); @@ -2097,7 +2104,7 @@ static int manager_process_signal_fd(Manager *m) { if (!u || UNIT_IS_ACTIVE_OR_RELOADING(unit_active_state(u))) { log_info("Trying to reconnect to bus..."); - bus_init(m); + bus_init(m, true); } if (!u || !UNIT_IS_ACTIVE_OR_ACTIVATING(unit_active_state(u))) { @@ -2172,7 +2179,21 @@ static int manager_process_signal_fd(Manager *m) { break; } - log_warning("Got unhandled signal <%s>.", strna(signal_to_string(sfsi.ssi_signo))); + switch (sfsi.ssi_signo - SIGRTMIN) { + + case 20: + log_debug("Enabling showing of status."); + m->show_status = true; + break; + + case 21: + log_debug("Disabling showing of status."); + m->show_status = false; + break; + + default: + log_warning("Got unhandled signal <%s>.", strna(signal_to_string(sfsi.ssi_signo))); + } } } } @@ -2423,7 +2444,6 @@ void manager_send_unit_plymouth(Manager *m, Unit *u) { union sockaddr_union sa; int n = 0; char *message = NULL; - ssize_t r; /* Don't generate plymouth events if the service was already * started and we're just deserializing */ @@ -2467,7 +2487,7 @@ void manager_send_unit_plymouth(Manager *m, Unit *u) { } errno = 0; - if ((r = write(fd, message, n + 1)) != n + 1) { + if (write(fd, message, n + 1) != n + 1) { if (errno != EPIPE && errno != EAGAIN && @@ -2988,6 +3008,20 @@ void manager_undo_generators(Manager *m) { m->generator_unit_path = NULL; } +int manager_set_default_controllers(Manager *m, char **controllers) { + char **l; + + assert(m); + + if (!(l = strv_copy(controllers))) + return -ENOMEM; + + strv_free(m->default_controllers); + m->default_controllers = l; + + return 0; +} + static const char* const manager_running_as_table[_MANAGER_RUNNING_AS_MAX] = { [MANAGER_SYSTEM] = "system", [MANAGER_USER] = "user"