nspawn: simplify machine terminate bus call
We have the machine name anyway, let's use TerminateMachine() on machined's Manager object directly with it. That way it's a single method call only, instead of two, to terminate the machine.
This commit is contained in:
parent
e5a2d8b5b5
commit
11d81e506e
|
@ -201,10 +201,11 @@ int register_machine(
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int terminate_machine(sd_bus *bus, pid_t pid) {
|
int terminate_machine(
|
||||||
|
sd_bus *bus,
|
||||||
|
const char *machine_name) {
|
||||||
|
|
||||||
_cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
|
_cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
|
||||||
_cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
|
|
||||||
const char *path;
|
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
assert(bus);
|
assert(bus);
|
||||||
|
@ -214,32 +215,11 @@ int terminate_machine(sd_bus *bus, pid_t pid) {
|
||||||
"org.freedesktop.machine1",
|
"org.freedesktop.machine1",
|
||||||
"/org/freedesktop/machine1",
|
"/org/freedesktop/machine1",
|
||||||
"org.freedesktop.machine1.Manager",
|
"org.freedesktop.machine1.Manager",
|
||||||
"GetMachineByPID",
|
"TerminateMachine",
|
||||||
&error,
|
|
||||||
&reply,
|
|
||||||
"u",
|
|
||||||
(uint32_t) pid);
|
|
||||||
if (r < 0) {
|
|
||||||
/* Note that the machine might already have been
|
|
||||||
* cleaned up automatically, hence don't consider it a
|
|
||||||
* failure if we cannot get the machine object. */
|
|
||||||
log_debug("Failed to get machine: %s", bus_error_message(&error, r));
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
r = sd_bus_message_read(reply, "o", &path);
|
|
||||||
if (r < 0)
|
|
||||||
return bus_log_parse_error(r);
|
|
||||||
|
|
||||||
r = sd_bus_call_method(
|
|
||||||
bus,
|
|
||||||
"org.freedesktop.machine1",
|
|
||||||
path,
|
|
||||||
"org.freedesktop.machine1.Machine",
|
|
||||||
"Terminate",
|
|
||||||
&error,
|
&error,
|
||||||
NULL,
|
NULL,
|
||||||
NULL);
|
"s",
|
||||||
|
machine_name);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
log_debug("Failed to terminate machine: %s", bus_error_message(&error, r));
|
log_debug("Failed to terminate machine: %s", bus_error_message(&error, r));
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,6 @@
|
||||||
#include "nspawn-mount.h"
|
#include "nspawn-mount.h"
|
||||||
|
|
||||||
int register_machine(sd_bus *bus, const char *machine_name, pid_t pid, const char *directory, sd_id128_t uuid, int local_ifindex, const char *slice, CustomMount *mounts, unsigned n_mounts, int kill_signal, char **properties, bool keep_unit, const char *service);
|
int register_machine(sd_bus *bus, const char *machine_name, pid_t pid, const char *directory, sd_id128_t uuid, int local_ifindex, const char *slice, CustomMount *mounts, unsigned n_mounts, int kill_signal, char **properties, bool keep_unit, const char *service);
|
||||||
int terminate_machine(sd_bus *bus, pid_t pid);
|
int terminate_machine(sd_bus *bus, const char *machine_name);
|
||||||
|
|
||||||
int allocate_scope(sd_bus *bus, const char *machine_name, pid_t pid, const char *slice, CustomMount *mounts, unsigned n_mounts, int kill_signal, char **properties);
|
int allocate_scope(sd_bus *bus, const char *machine_name, pid_t pid, const char *slice, CustomMount *mounts, unsigned n_mounts, int kill_signal, char **properties);
|
||||||
|
|
|
@ -4130,7 +4130,7 @@ static int run(int master,
|
||||||
|
|
||||||
/* Kill if it is not dead yet anyway */
|
/* Kill if it is not dead yet anyway */
|
||||||
if (arg_register && !arg_keep_unit && bus)
|
if (arg_register && !arg_keep_unit && bus)
|
||||||
terminate_machine(bus, *pid);
|
terminate_machine(bus, arg_machine);
|
||||||
|
|
||||||
/* Normally redundant, but better safe than sorry */
|
/* Normally redundant, but better safe than sorry */
|
||||||
(void) kill(*pid, SIGKILL);
|
(void) kill(*pid, SIGKILL);
|
||||||
|
|
Loading…
Reference in a new issue