mirror of
https://github.com/systemd/systemd.git
synced 2024-11-01 09:21:26 +03:00
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;
|
||||
}
|
||||
|
||||
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_message_unrefp) sd_bus_message *reply = NULL;
|
||||
const char *path;
|
||||
int r;
|
||||
|
||||
assert(bus);
|
||||
@ -214,32 +215,11 @@ int terminate_machine(sd_bus *bus, pid_t pid) {
|
||||
"org.freedesktop.machine1",
|
||||
"/org/freedesktop/machine1",
|
||||
"org.freedesktop.machine1.Manager",
|
||||
"GetMachineByPID",
|
||||
&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",
|
||||
"TerminateMachine",
|
||||
&error,
|
||||
NULL,
|
||||
NULL);
|
||||
"s",
|
||||
machine_name);
|
||||
if (r < 0)
|
||||
log_debug("Failed to terminate machine: %s", bus_error_message(&error, r));
|
||||
|
||||
|
@ -8,6 +8,6 @@
|
||||
#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 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);
|
||||
|
@ -4130,7 +4130,7 @@ static int run(int master,
|
||||
|
||||
/* Kill if it is not dead yet anyway */
|
||||
if (arg_register && !arg_keep_unit && bus)
|
||||
terminate_machine(bus, *pid);
|
||||
terminate_machine(bus, arg_machine);
|
||||
|
||||
/* Normally redundant, but better safe than sorry */
|
||||
(void) kill(*pid, SIGKILL);
|
||||
|
Loading…
Reference in New Issue
Block a user