core: when we cannot add PID to a scope cgroup, log about it
authorLennart Poettering <lennart@poettering.net>
Tue, 28 Apr 2015 10:20:29 +0000 (12:20 +0200)
committerLennart Poettering <lennart@poettering.net>
Tue, 28 Apr 2015 10:20:57 +0000 (12:20 +0200)
Also, place the scope unit in failed state.

src/core/execute.c
src/core/scope.c

index bbd0d2c..9eba323 100644 (file)
@@ -1809,6 +1809,7 @@ static int exec_child(
                         log_close();
                 }
         }
+
         execve(command->path, final_argv, final_env);
         *exit_status = EXIT_EXEC;
         return -errno;
@@ -1903,7 +1904,7 @@ int exec_spawn(ExecCommand *command,
          * sure that when we kill the cgroup the process will be
          * killed too). */
         if (params->cgroup_path)
-                cg_attach(SYSTEMD_CGROUP_CONTROLLER, params->cgroup_path, pid);
+                (void) cg_attach(SYSTEMD_CGROUP_CONTROLLER, params->cgroup_path, pid);
 
         exec_status_start(&command->exec_status, pid);
 
index 1c3c6bb..1848641 100644 (file)
@@ -277,6 +277,7 @@ static int scope_start(Unit *u) {
         if (s->state == SCOPE_FAILED)
                 return -EPERM;
 
+        /* We can't fulfill this right now, please try again later */
         if (s->state == SCOPE_STOP_SIGTERM ||
             s->state == SCOPE_STOP_SIGKILL)
                 return -EAGAIN;
@@ -290,8 +291,11 @@ static int scope_start(Unit *u) {
         (void) unit_reset_cpu_usage(u);
 
         r = unit_attach_pids_to_cgroup(u);
-        if (r < 0)
+        if (r < 0) {
+                log_unit_warning_errno(UNIT(s)->id, r, "%s: Failed to add PIDs to scope's control group: %m", UNIT(s)->id);
+                scope_enter_dead(s, SERVICE_FAILURE_RESOURCES);
                 return r;
+        }
 
         s->result = SCOPE_SUCCESS;