chiark / gitweb /
cgroup: add missing equals for BlockIOWeight
[elogind.git] / src / core / scope.c
index f88addadf34b8fdd39842dff79bfba1193b7f7f1..b94f3ff7ba2758c50d3946b9bd3c634bc39186ea 100644 (file)
@@ -112,7 +112,7 @@ static int scope_verify(Scope *s) {
         if (UNIT(s)->load_state != UNIT_LOADED)
                 return 0;
 
-        if (set_size(s->pids) <= 0) {
+        if (set_size(s->pids) <= 0 && UNIT(s)->manager->n_reloading <= 0) {
                 log_error_unit(UNIT(s)->id, "Scope %s has no PIDs. Refusing.", UNIT(s)->id);
                 return -EINVAL;
         }
@@ -239,6 +239,9 @@ static int scope_start(Unit *u) {
 
         assert(s);
 
+        if (s->state == SCOPE_FAILED)
+                return -EPERM;
+
         if (s->state == SCOPE_STOP_SIGTERM ||
             s->state == SCOPE_STOP_SIGKILL)
                 return -EAGAIN;
@@ -283,6 +286,17 @@ static int scope_stop(Unit *u) {
         return 0;
 }
 
+static void scope_reset_failed(Unit *u) {
+        Scope *s = SCOPE(u);
+
+        assert(s);
+
+        if (s->state == SCOPE_FAILED)
+                scope_set_state(s, SCOPE_DEAD);
+
+        s->result = SCOPE_SUCCESS;
+}
+
 static int scope_kill(Unit *u, KillWho who, int signo, DBusError *error) {
         return unit_kill_common(u, who, signo, -1, -1, error);
 }
@@ -403,7 +417,7 @@ _pure_ static const char *scope_sub_state_to_string(Unit *u) {
 
 static const char* const scope_state_table[_SCOPE_STATE_MAX] = {
         [SCOPE_DEAD] = "dead",
-        [SCOPE_RUNNING] = "active",
+        [SCOPE_RUNNING] = "running",
         [SCOPE_STOP_SIGTERM] = "stop-sigterm",
         [SCOPE_STOP_SIGKILL] = "stop-sigkill",
         [SCOPE_FAILED] = "failed",
@@ -455,6 +469,8 @@ const UnitVTable scope_vtable = {
 
         .timer_event = scope_timer_event,
 
+        .reset_failed = scope_reset_failed,
+
         .notify_cgroup_empty = scope_notify_cgroup_empty_event,
 
         .bus_interface = "org.freedesktop.systemd1.Scope",