X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fmachine%2Fmachine.c;h=223eb0f3641be7677742a0f9d7dc1075a404b97c;hb=a38d99451f2bf8026ec51aee91662292e823c6a8;hp=1c9177e1c379b9a60ad2a7424b42bf2b8af8b4a6;hpb=a2a5291b3f5ab6ed4c92f51d0fd10a03047380d8;p=elogind.git diff --git a/src/machine/machine.c b/src/machine/machine.c index 1c9177e1c..223eb0f36 100644 --- a/src/machine/machine.c +++ b/src/machine/machine.c @@ -32,9 +32,10 @@ #include "fileio.h" #include "special.h" #include "unit-name.h" -#include "machine.h" #include "bus-util.h" #include "bus-error.h" +#include "machine.h" +#include "machine-dbus.h" Machine* machine_new(Manager *manager, const char *name) { Machine *m; @@ -201,23 +202,25 @@ int machine_save(Machine *m) { goto finish; } + free(temp_path); + temp_path = NULL; + if (m->unit) { char *sl; /* Create a symlink from the unit name to the machine * name, so that we can quickly find the machine for * each given unit */ - sl = strappenda("/run/systemd/machines/unit:", m->unit); + sl = strjoina("/run/systemd/machines/unit:", m->unit); symlink(m->name, sl); } finish: - if (r < 0) { - if (temp_path) - unlink(temp_path); + if (temp_path) + unlink(temp_path); - log_error("Failed to save machine data %s: %s", m->state_file, strerror(-r)); - } + if (r < 0) + log_error_errno(r, "Failed to save machine data %s: %m", m->state_file); return r; } @@ -229,7 +232,7 @@ static void machine_unlink(Machine *m) { char *sl; - sl = strappenda("/run/systemd/machines/unit:", m->unit); + sl = strjoina("/run/systemd/machines/unit:", m->unit); unlink(sl); } @@ -259,8 +262,7 @@ int machine_load(Machine *m) { if (r == -ENOENT) return 0; - log_error("Failed to read %s: %s", m->state_file, strerror(-r)); - return r; + return log_error_errno(r, "Failed to read %s: %m", m->state_file); } if (id) @@ -338,7 +340,7 @@ static int machine_start_scope(Machine *m, sd_bus_message *properties, sd_bus_er if (!scope) return log_oom(); - description = strappenda(m->class == MACHINE_VM ? "Virtual Machine " : "Container ", m->name); + description = strjoina(m->class == MACHINE_VM ? "Virtual Machine " : "Container ", m->name); r = manager_start_scope(m->manager, scope, m->leader, SPECIAL_MACHINE_SLICE, description, properties, error, &job); if (r < 0) { @@ -377,10 +379,10 @@ int machine_start(Machine *m, sd_bus_message *properties, sd_bus_error *error) { return r; log_struct(LOG_INFO, - MESSAGE_ID(SD_MESSAGE_MACHINE_START), + LOG_MESSAGE_ID(SD_MESSAGE_MACHINE_START), "NAME=%s", m->name, "LEADER="PID_FMT, m->leader, - "MESSAGE=New machine %s.", m->name, + LOG_MESSAGE("New machine %s.", m->name), NULL); if (!dual_timestamp_is_set(&m->timestamp)) @@ -406,12 +408,10 @@ static int machine_stop_scope(Machine *m) { if (!m->unit) return 0; - if (!m->registered) { - r = manager_stop_unit(m->manager, m->unit, &error, &job); - if (r < 0) { - log_error("Failed to stop machine scope: %s", bus_error_message(&error, r)); - return r; - } + r = manager_stop_unit(m->manager, m->unit, &error, &job); + if (r < 0) { + log_error("Failed to stop machine scope: %s", bus_error_message(&error, r)); + return r; } free(m->scope_job); @@ -426,10 +426,10 @@ int machine_stop(Machine *m) { if (m->started) log_struct(LOG_INFO, - MESSAGE_ID(SD_MESSAGE_MACHINE_STOP), + LOG_MESSAGE_ID(SD_MESSAGE_MACHINE_STOP), "NAME=%s", m->name, "LEADER="PID_FMT, m->leader, - "MESSAGE=Machine %s terminated.", m->name, + LOG_MESSAGE("Machine %s terminated.", m->name), NULL); /* Kill cgroup */ @@ -493,6 +493,8 @@ int machine_kill(Machine *m, KillWho who, int signo) { if (kill(m->leader, signo) < 0) return -errno; + + return 0; } /* Otherwise make PID 1 do it for us, for the entire cgroup */