]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
service: make kill operation mapping explicit
authorLennart Poettering <lennart@poettering.net>
Tue, 21 Apr 2015 00:17:01 +0000 (02:17 +0200)
committerLennart Poettering <lennart@poettering.net>
Tue, 21 Apr 2015 00:17:01 +0000 (02:17 +0200)
src/core/service.c
src/core/unit.h

index fa818fc871c7e8b0f986dae98168bbbc978c574a..3b241fd0a4a5e79b04fdfdc73688ba4297263b8d 100644 (file)
@@ -1367,6 +1367,25 @@ fail:
         service_enter_signal(s, SERVICE_FINAL_SIGTERM, SERVICE_FAILURE_RESOURCES);
 }
 
+static int state_to_kill_operation(ServiceState state) {
+        switch (state) {
+
+        case SERVICE_STOP_SIGABRT:
+                return KILL_ABORT;
+
+        case SERVICE_STOP_SIGTERM:
+        case SERVICE_FINAL_SIGTERM:
+                return KILL_TERMINATE;
+
+        case SERVICE_STOP_SIGKILL:
+        case SERVICE_FINAL_SIGKILL:
+                return KILL_KILL;
+
+        default:
+                return _KILL_OPERATION_INVALID;
+        }
+}
+
 static void service_enter_signal(Service *s, ServiceState state, ServiceResult f) {
         int r;
 
@@ -1380,8 +1399,7 @@ static void service_enter_signal(Service *s, ServiceState state, ServiceResult f
         r = unit_kill_context(
                         UNIT(s),
                         &s->kill_context,
-                        (state != SERVICE_STOP_SIGTERM && state != SERVICE_FINAL_SIGTERM && state != SERVICE_STOP_SIGABRT) ?
-                        KILL_KILL : (state == SERVICE_STOP_SIGABRT ? KILL_ABORT : KILL_TERMINATE),
+                        state_to_kill_operation(state),
                         s->main_pid,
                         s->control_pid,
                         s->main_pid_alien);
index 11242c2a001c54050bb0e0968c6152819d432214..260dc451c7b297487f9664071c9823c13a70a0ba 100644 (file)
@@ -52,6 +52,8 @@ typedef enum KillOperation {
         KILL_TERMINATE,
         KILL_KILL,
         KILL_ABORT,
+        _KILL_OPERATION_MAX,
+        _KILL_OPERATION_INVALID = -1
 } KillOperation;
 
 static inline bool UNIT_IS_ACTIVE_OR_RELOADING(UnitActiveState t) {