machined: rework referencing of machine scopes from machined, too
When a machine scope is registered by machined, let's add a reference to it, and change the GC mode so that the unit is cleaned up as soon as machined drops the reference, regardless of the fail state. Fixes: #2809
This commit is contained in:
+11
-4
@@ -403,7 +403,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;
|
||||
int r, q;
|
||||
|
||||
assert(m);
|
||||
assert(m->class != MACHINE_HOST);
|
||||
@@ -412,10 +412,17 @@ static int machine_stop_scope(Machine *m) {
|
||||
return 0;
|
||||
|
||||
r = manager_stop_unit(m->manager, m->unit, &error, &job);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to stop machine scope: %s", bus_error_message(&error, r));
|
||||
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);
|
||||
|
||||
return free_and_replace(m->scope_job, job);
|
||||
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));
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
int machine_stop(Machine *m) {
|
||||
|
||||
Reference in New Issue
Block a user