prefix, strna(unit_slice_name(u)),
prefix, strna(u->cgroup_path),
prefix, yes_no(u->cgroup_realized),
- prefix, u->cgroup_mask,
+ prefix, u->cgroup_realized_mask,
prefix, u->cgroup_members_mask);
SET_FOREACH(t, u->names, i)
return unit_add_dependency(target, UNIT_AFTER, u, true);
}
-static int unit_add_default_dependencies(Unit *u) {
+static int unit_add_target_dependencies(Unit *u) {
static const UnitDependency deps[] = {
UNIT_REQUIRED_BY,
Unit *target;
Iterator i;
- int r;
unsigned k;
+ int r;
assert(u);
return r;
}
- if (u->default_dependencies && unit_get_cgroup_context(u)) {
- if (UNIT_ISSET(u->slice))
- r = unit_add_two_dependencies(u, UNIT_AFTER, UNIT_WANTS, UNIT_DEREF(u->slice), true);
- else
- r = unit_add_two_dependencies_by_name(u, UNIT_AFTER, UNIT_WANTS, SPECIAL_ROOT_SLICE, NULL, true);
+ return r;
+}
- if (r < 0)
- return r;
- }
+static int unit_add_slice_dependencies(Unit *u) {
+ assert(u);
- return 0;
+ if (!unit_get_cgroup_context(u))
+ return 0;
+
+ if (UNIT_ISSET(u->slice))
+ return unit_add_two_dependencies(u, UNIT_AFTER, UNIT_WANTS, UNIT_DEREF(u->slice), true);
+
+ return unit_add_two_dependencies_by_name(u, UNIT_AFTER, UNIT_WANTS, SPECIAL_ROOT_SLICE, NULL, true);
}
-static int unit_add_mount_links(Unit *u) {
+static int unit_add_mount_dependencies(Unit *u) {
char **i;
int r;
if (u->load_state == UNIT_LOADED) {
- if (u->default_dependencies) {
- r = unit_add_default_dependencies(u);
- if (r < 0)
- goto fail;
- }
-
- unit_update_member_masks(u);
-
- r = unit_add_mount_links(u);
+ r = unit_add_target_dependencies(u);
if (r < 0)
goto fail;
- if (u->on_failure_job_mode == JOB_ISOLATE &&
- set_size(u->dependencies[UNIT_ON_FAILURE]) > 1) {
+ r = unit_add_slice_dependencies(u);
+ if (r < 0)
+ goto fail;
- log_error_unit(u->id,
- "More than one OnFailure= dependencies specified for %s but OnFailureJobMode=isolate set. Refusing.", u->id);
+ r = unit_add_mount_dependencies(u);
+ if (r < 0)
+ goto fail;
+ if (u->on_failure_job_mode == JOB_ISOLATE && set_size(u->dependencies[UNIT_ON_FAILURE]) > 1) {
+ log_error_unit(u->id, "More than one OnFailure= dependencies specified for %s but OnFailureJobMode=isolate set. Refusing.", u->id);
r = -EINVAL;
goto fail;
}
+
+ unit_update_cgroup_members_masks(u);
}
assert((u->load_state != UNIT_MERGED) == !u->merged_into);
* 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);
+ ExecContext *ec;
+
+ ec = unit_get_exec_context(u);
if (ec && exec_context_may_touch_console(ec)) {
if (UNIT_IS_INACTIVE_OR_FAILED(ns)) {
m->n_on_console --;
}
/* stop unneeded units regardless if going down was expected or not */
- if (UNIT_IS_ACTIVE_OR_ACTIVATING(os) && UNIT_IS_INACTIVE_OR_DEACTIVATING(ns))
+ if (UNIT_IS_INACTIVE_OR_DEACTIVATING(ns))
check_unneeded_dependencies(u);
if (ns != os && ns == UNIT_FAILED) {
- log_notice_unit(u->id,
- "Unit %s entered failed state.", u->id);
+ log_notice_unit(u->id, "Unit %s entered failed state.", u->id);
unit_start_on_failure(u);
}
}
if (pid == except1 || pid == except2)
continue;
- if (kill(pid, 0) < 0 && errno == ESRCH)
+ if (!pid_is_unwaited(pid))
set_remove(u->pids, e);
}
}
assert(name);
assert(_p);
assert(_q);
- assert(mode & (UNIT_PERSISTENT|UNIT_RUNTIME));
b = xescape(name, "/.");
if (!b)
return -ENOENT;
p = strjoin(c, "/", u->id, ".d", NULL);
- } else if (mode & UNIT_PERSISTENT)
+ } else if (mode == UNIT_PERSISTENT && !u->transient)
p = strjoin("/etc/systemd/system/", u->id, ".d", NULL);
else
p = strjoin("/run/systemd/system/", u->id, ".d", NULL);
assert(name);
assert(data);
- if (!(mode & (UNIT_PERSISTENT|UNIT_RUNTIME)))
+ if (!IN_SET(mode, UNIT_PERSISTENT, UNIT_RUNTIME))
return 0;
r = drop_in_file(u, mode, name, &p, &q);
assert(name);
assert(format);
- if (!(mode & (UNIT_PERSISTENT|UNIT_RUNTIME)))
+ if (!IN_SET(mode, UNIT_PERSISTENT, UNIT_RUNTIME))
return 0;
va_start(ap, format);
if (!UNIT_VTABLE(u)->private_section)
return -EINVAL;
- if (!(mode & (UNIT_PERSISTENT|UNIT_RUNTIME)))
+ if (!IN_SET(mode, UNIT_PERSISTENT, UNIT_RUNTIME))
return 0;
ndata = strjoin("[", UNIT_VTABLE(u)->private_section, "]\n", data, NULL);
assert(name);
assert(format);
- if (!(mode & (UNIT_PERSISTENT|UNIT_RUNTIME)))
+ if (!IN_SET(mode, UNIT_PERSISTENT, UNIT_RUNTIME))
return 0;
va_start(ap, format);
assert(u);
- if (!(mode & (UNIT_PERSISTENT|UNIT_RUNTIME)))
+ if (!IN_SET(mode, UNIT_PERSISTENT, UNIT_RUNTIME))
return 0;
r = drop_in_file(u, mode, name, &p, &q);