goto fail;
}
- if ((r = unit_name_to_instance(s, &i)) < 0)
+ r = unit_name_to_instance(s, &i);
+ if (r < 0)
goto fail;
if (i && unit_vtable[t]->no_instances) {
goto fail;
}
- if ((r = set_put(u->names, s)) < 0) {
+ r = set_put(u->names, s);
+ if (r < 0) {
if (r == -EEXIST)
r = 0;
goto fail;
}
- if ((r = hashmap_put(u->manager->units, s, u)) < 0) {
+ r = hashmap_put(u->manager->units, s, u);
+ if (r < 0) {
set_remove(u->names, s);
goto fail;
}
if (!u->instance)
return -EINVAL;
- if (!(t = unit_name_replace_instance(name, u->instance)))
+ t = unit_name_replace_instance(name, u->instance);
+ if (!t)
return -ENOMEM;
name = t;
if (!s)
return -ENOENT;
- if ((r = unit_name_to_instance(s, &i)) < 0)
+ r = unit_name_to_instance(s, &i);
+ if (r < 0)
return r;
u->id = s;
SET_FOREACH(back, other->dependencies[d], i) {
UnitDependency k;
- for (k = 0; k < _UNIT_DEPENDENCY_MAX; k++)
- if ((r = set_remove_and_put(back->dependencies[k], other, u)) < 0) {
-
- if (r == -EEXIST)
- set_remove(back->dependencies[k], other);
- else
- assert(r == -ENOENT);
- }
+ for (k = 0; k < _UNIT_DEPENDENCY_MAX; k++) {
+ r = set_remove_and_put(back->dependencies[k], other, u);
+ if (r == -EEXIST)
+ set_remove(back->dependencies[k], other);
+ else
+ assert(r >= 0 || r == -ENOENT);
+ }
}
complete_move(&u->dependencies[d], &other->dependencies[d]);
if (!u->instance)
return -EINVAL;
- if (!(s = unit_name_replace_instance(name, u->instance)))
+ s = unit_name_replace_instance(name, u->instance);
+ if (!s)
return -ENOMEM;
name = s;
assert(u);
- /* Load a .service file */
+ /* Load a .{service,socket,...} file */
r = unit_load_fragment(u);
if (r < 0)
return r;
if (state != UNIT_ACTIVE)
return -ENOEXEC;
- if ((following = unit_following(u))) {
+ following = unit_following(u);
+ if (following) {
log_debug_unit(u->id, "Redirecting reload request from %s to %s.",
u->id, following->id);
return unit_reload(following);
if (UNIT_IS_INACTIVE_OR_FAILED(ns))
unit_destroy_cgroup(u);
+ /* Note that this doesn't apply to RemainAfterExit services exiting
+ * sucessfully, since there's no change of state in that case. Which is
+ * why it is handled in service_set_state() */
if (UNIT_IS_INACTIVE_OR_FAILED(os) != UNIT_IS_INACTIVE_OR_FAILED(ns)) {
ExecContext *ec = unit_get_exec_context(u);
if (ec && exec_context_may_touch_console(ec)) {