chiark / gitweb /
machined: don't force terminate registered machines
authorLennart Poettering <lennart@poettering.net>
Thu, 3 Jul 2014 10:48:51 +0000 (12:48 +0200)
committerLennart Poettering <lennart@poettering.net>
Thu, 3 Jul 2014 10:51:07 +0000 (12:51 +0200)
When a machine is registered in machined with CreateMachine it is OK to
kill the machine when it is terminated, but when an existing unit is
simply registered via RegisterMachine we shouldn't do that, as the unit
is controlled by somebody else.

src/machine/machine.c
src/machine/machine.h
src/machine/machined-dbus.c

index 0b0d45b..c0fa1b2 100644 (file)
@@ -360,10 +360,12 @@ static int machine_stop_scope(Machine *m) {
         if (!m->unit)
                 return 0;
 
-        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;
+        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;
+                }
         }
 
         free(m->scope_job);
index a894a46..ed1c81c 100644 (file)
@@ -72,6 +72,7 @@ struct Machine {
 
         bool in_gc_queue:1;
         bool started:1;
+        bool registered:1;
 
         sd_bus_message *create_message;
 
index 6f8ba47..7c1802c 100644 (file)
@@ -223,6 +223,7 @@ static int method_create_or_register_machine(Manager *manager, sd_bus_message *m
         m->leader = leader;
         m->class = c;
         m->id = id;
+        m->registered = true;
 
         if (!isempty(service)) {
                 m->service = strdup(service);