free(u->cgroup_path);
}
+ set_remove(u->manager->failed_units, u);
+
free(u->description);
strv_free(u->documentation);
free(u->fragment_path);
m = u->manager;
+ /* Update timestamps for state changes */
if (m->n_reloading <= 0) {
dual_timestamp ts;
u->active_exit_timestamp = ts;
}
+ /* Keep track of failed of units */
+ if (ns == UNIT_FAILED && os != UNIT_FAILED)
+ set_put(u->manager->failed_units, u);
+ else if (os == UNIT_FAILED && ns != UNIT_FAILED)
+ set_remove(u->manager->failed_units, u);
+
+ /* Make sure the cgroup is always removed when we become inactive */
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
+ * successfully, 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;
!set_isempty(c->address_families)))
c->no_new_privileges = true;
+ if (c->private_devices)
+ c->capability_bounding_set_drop |= (uint64_t) 1ULL << (uint64_t) CAP_MKNOD;
+
return 0;
}