]> git.ipfire.org Git - thirdparty/systemd.git/blobdiff - src/machine/machine.c
machined: simplify reference handling for units
[thirdparty/systemd.git] / src / machine / machine.c
index 38c09d7117e4557a89c72b8c812dbea159e3390f..d35eb1c14d534f17ad65b2daa4c6c6b19af21061 100644 (file)
@@ -478,7 +478,7 @@ int machine_start(Machine *m, sd_bus_message *properties, sd_bus_error *error) {
 static int machine_stop_scope(Machine *m) {
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
         char *job = NULL;
-        int r, q;
+        int r;
 
         assert(m);
         assert(m->class != MACHINE_HOST);
@@ -487,20 +487,11 @@ static int machine_stop_scope(Machine *m) {
                 return 0;
 
         r = manager_stop_unit(m->manager, m->unit, &error, &job);
-        if (r < 0) {
-                log_error_errno(r, "Failed to stop machine scope: %s", bus_error_message(&error, r));
-                sd_bus_error_free(&error);
-        } else
-                free_and_replace(m->scope_job, job);
-
-        if (m->referenced) {
-                q = manager_unref_unit(m->manager, m->unit, &error);
-                if (q < 0)
-                        log_warning_errno(q, "Failed to drop reference to machine scope, ignoring: %s", bus_error_message(&error, r));
-                m->referenced = false;
-        }
+        if (r < 0)
+                return log_error_errno(r, "Failed to stop machine scope: %s", bus_error_message(&error, r));
 
-        return r;
+        free_and_replace(m->scope_job, job);
+        return 0;
 }
 
 int machine_stop(Machine *m) {
@@ -654,6 +645,18 @@ void machine_release_unit(Machine *m) {
         if (!m->unit)
                 return;
 
+        if (m->referenced) {
+                _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
+                int r;
+
+                r = manager_unref_unit(m->manager, m->unit, &error);
+                if (r < 0)
+                        log_warning_errno(r, "Failed to drop reference to machine scope, ignoring: %s",
+                                          bus_error_message(&error, r));
+
+                m->referenced = false;
+        }
+
         (void) hashmap_remove(m->manager->machine_units, m->unit);
         m->unit = mfree(m->unit);
 }