summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2019-10-29 09:47:57 +0100
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2019-10-29 10:54:45 +0100
commit0bb0a9faa7a9be917255648dcbc4b13132d90161 (patch)
treed6ad4086d2a821837ad5433aefbd38f8278bd131 /src
parentef8ff92e8ae014d352de381ff0a83e25e6f00efb (diff)
downloadsystemd-0bb0a9faa7a9be917255648dcbc4b13132d90161.tar.gz
nspawn: when stopping the machine, just deregister the machine
We already shut the machine down ourselves (and pid1 will also do cleanup for us after we exit if anything was left behind). No need for systemd-machined to try to stop the unit too. (This calls the new machined method. If we are running against an older machined, we will not deregister the machine. If we are simply exiting, machined should notice that the unit is gone on its own. If we are restarting, we will fail to register the machine after restart and fail. But this case was already broken, because machined would create a stop job, breaking the restart. So not doing anything with old machined should not make anything more broken than it already is.) Fixes #13766.
Diffstat (limited to 'src')
-rw-r--r--src/nspawn/nspawn-register.c6
-rw-r--r--src/nspawn/nspawn-register.h2
-rw-r--r--src/nspawn/nspawn.c12
3 files changed, 10 insertions, 10 deletions
diff --git a/src/nspawn/nspawn-register.c b/src/nspawn/nspawn-register.c
index 8e2c329665..7541c56d8f 100644
--- a/src/nspawn/nspawn-register.c
+++ b/src/nspawn/nspawn-register.c
@@ -209,7 +209,7 @@ int register_machine(
return 0;
}
-int terminate_machine(
+int unregister_machine(
sd_bus *bus,
const char *machine_name) {
@@ -223,13 +223,13 @@ int terminate_machine(
"org.freedesktop.machine1",
"/org/freedesktop/machine1",
"org.freedesktop.machine1.Manager",
- "TerminateMachine",
+ "UnregisterMachine",
&error,
NULL,
"s",
machine_name);
if (r < 0)
- log_debug("Failed to terminate machine: %s", bus_error_message(&error, r));
+ log_debug("Failed to unregister machine: %s", bus_error_message(&error, r));
return 0;
}
diff --git a/src/nspawn/nspawn-register.h b/src/nspawn/nspawn-register.h
index 65a3ae85a7..07cca7fadc 100644
--- a/src/nspawn/nspawn-register.h
+++ b/src/nspawn/nspawn-register.h
@@ -8,7 +8,7 @@
#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, sd_bus_message *properties_message, bool keep_unit, const char *service);
-int terminate_machine(sd_bus *bus, const char *machine_name);
+int unregister_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, sd_bus_message *properties_message);
int terminate_scope(sd_bus *bus, const char *machine_name);
diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c
index fed5c651ce..48244f3ae8 100644
--- a/src/nspawn/nspawn.c
+++ b/src/nspawn/nspawn.c
@@ -4551,12 +4551,8 @@ static int run_container(
}
/* Kill if it is not dead yet anyway */
- if (bus) {
- if (arg_register)
- terminate_machine(bus, arg_machine);
- else if (!arg_keep_unit)
- terminate_scope(bus, arg_machine);
- }
+ if (!arg_register && !arg_keep_unit && bus)
+ terminate_scope(bus, arg_machine);
/* Normally redundant, but better safe than sorry */
(void) kill(*pid, SIGKILL);
@@ -4564,6 +4560,10 @@ static int run_container(
r = wait_for_container(*pid, &container_status);
*pid = 0;
+ /* Tell machined that we are gone. */
+ if (bus)
+ (void) unregister_machine(bus, arg_machine);
+
if (r < 0)
/* We failed to wait for the container, or the container exited abnormally. */
return r;