logind: simplify job variable handling
manager_{start,stop}_{slice,scope,unit} functions had an optional job output parameter. But all callers specified job, so make the parameter mandatory, add asserts. Also extract common job variable handling to a helper function to avoid duplication. Avoids gcc warning about job being unitialized.
This commit is contained in:
parent
011062f3c0
commit
2adae5ac5d
|
@ -2751,6 +2751,23 @@ int manager_send_changed(Manager *manager, const char *property, ...) {
|
|||
l);
|
||||
}
|
||||
|
||||
static int strdup_job(sd_bus_message *reply, char **job) {
|
||||
const char *j;
|
||||
char *copy;
|
||||
int r;
|
||||
|
||||
r = sd_bus_message_read(reply, "o", &j);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
copy = strdup(j);
|
||||
if (!copy)
|
||||
return -ENOMEM;
|
||||
|
||||
*job = copy;
|
||||
return 1;
|
||||
}
|
||||
|
||||
int manager_start_slice(
|
||||
Manager *manager,
|
||||
const char *slice,
|
||||
|
@ -2766,6 +2783,7 @@ int manager_start_slice(
|
|||
|
||||
assert(manager);
|
||||
assert(slice);
|
||||
assert(job);
|
||||
|
||||
r = sd_bus_message_new_method_call(
|
||||
manager->bus,
|
||||
|
@ -2819,22 +2837,7 @@ int manager_start_slice(
|
|||
if (r < 0)
|
||||
return r;
|
||||
|
||||
if (job) {
|
||||
const char *j;
|
||||
char *copy;
|
||||
|
||||
r = sd_bus_message_read(reply, "o", &j);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
copy = strdup(j);
|
||||
if (!copy)
|
||||
return -ENOMEM;
|
||||
|
||||
*job = copy;
|
||||
}
|
||||
|
||||
return 1;
|
||||
return strdup_job(reply, job);
|
||||
}
|
||||
|
||||
int manager_start_scope(
|
||||
|
@ -2855,6 +2858,7 @@ int manager_start_scope(
|
|||
assert(manager);
|
||||
assert(scope);
|
||||
assert(pid > 1);
|
||||
assert(job);
|
||||
|
||||
r = sd_bus_message_new_method_call(
|
||||
manager->bus,
|
||||
|
@ -2929,22 +2933,7 @@ int manager_start_scope(
|
|||
if (r < 0)
|
||||
return r;
|
||||
|
||||
if (job) {
|
||||
const char *j;
|
||||
char *copy;
|
||||
|
||||
r = sd_bus_message_read(reply, "o", &j);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
copy = strdup(j);
|
||||
if (!copy)
|
||||
return -ENOMEM;
|
||||
|
||||
*job = copy;
|
||||
}
|
||||
|
||||
return 1;
|
||||
return strdup_job(reply, job);
|
||||
}
|
||||
|
||||
int manager_start_unit(Manager *manager, const char *unit, sd_bus_error *error, char **job) {
|
||||
|
@ -2953,6 +2942,7 @@ int manager_start_unit(Manager *manager, const char *unit, sd_bus_error *error,
|
|||
|
||||
assert(manager);
|
||||
assert(unit);
|
||||
assert(job);
|
||||
|
||||
r = sd_bus_call_method(
|
||||
manager->bus,
|
||||
|
@ -2966,22 +2956,7 @@ int manager_start_unit(Manager *manager, const char *unit, sd_bus_error *error,
|
|||
if (r < 0)
|
||||
return r;
|
||||
|
||||
if (job) {
|
||||
const char *j;
|
||||
char *copy;
|
||||
|
||||
r = sd_bus_message_read(reply, "o", &j);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
copy = strdup(j);
|
||||
if (!copy)
|
||||
return -ENOMEM;
|
||||
|
||||
*job = copy;
|
||||
}
|
||||
|
||||
return 1;
|
||||
return strdup_job(reply, job);
|
||||
}
|
||||
|
||||
int manager_stop_unit(Manager *manager, const char *unit, sd_bus_error *error, char **job) {
|
||||
|
@ -2990,6 +2965,7 @@ int manager_stop_unit(Manager *manager, const char *unit, sd_bus_error *error, c
|
|||
|
||||
assert(manager);
|
||||
assert(unit);
|
||||
assert(job);
|
||||
|
||||
r = sd_bus_call_method(
|
||||
manager->bus,
|
||||
|
@ -3004,9 +2980,7 @@ int manager_stop_unit(Manager *manager, const char *unit, sd_bus_error *error, c
|
|||
if (sd_bus_error_has_name(error, BUS_ERROR_NO_SUCH_UNIT) ||
|
||||
sd_bus_error_has_name(error, BUS_ERROR_LOAD_FAILED)) {
|
||||
|
||||
if (job)
|
||||
*job = NULL;
|
||||
|
||||
*job = NULL;
|
||||
sd_bus_error_free(error);
|
||||
return 0;
|
||||
}
|
||||
|
@ -3014,22 +2988,7 @@ int manager_stop_unit(Manager *manager, const char *unit, sd_bus_error *error, c
|
|||
return r;
|
||||
}
|
||||
|
||||
if (job) {
|
||||
const char *j;
|
||||
char *copy;
|
||||
|
||||
r = sd_bus_message_read(reply, "o", &j);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
copy = strdup(j);
|
||||
if (!copy)
|
||||
return -ENOMEM;
|
||||
|
||||
*job = copy;
|
||||
}
|
||||
|
||||
return 1;
|
||||
return strdup_job(reply, job);
|
||||
}
|
||||
|
||||
int manager_abandon_scope(Manager *manager, const char *scope, sd_bus_error *error) {
|
||||
|
|
|
@ -412,13 +412,12 @@ static int user_start_slice(User *u) {
|
|||
u->manager->user_tasks_max,
|
||||
&error,
|
||||
&job);
|
||||
if (r < 0) {
|
||||
/* we don't fail due to this, let's try to continue */
|
||||
if (!sd_bus_error_has_name(&error, BUS_ERROR_UNIT_EXISTS))
|
||||
log_error_errno(r, "Failed to start user slice %s, ignoring: %s (%s)", u->slice, bus_error_message(&error, r), error.name);
|
||||
} else {
|
||||
if (r >= 0)
|
||||
u->slice_job = job;
|
||||
}
|
||||
else if (!sd_bus_error_has_name(&error, BUS_ERROR_UNIT_EXISTS))
|
||||
/* we don't fail due to this, let's try to continue */
|
||||
log_error_errno(r, "Failed to start user slice %s, ignoring: %s (%s)",
|
||||
u->slice, bus_error_message(&error, r), error.name);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue