chiark / gitweb /
core/smack: downgrade info to debug
[elogind.git] / src / core / socket.c
index f2d854851d5c8c94435c7a129feddf0bd433b353..2105369018e4b80f59011156b988fde96a33313c 100644 (file)
@@ -1288,54 +1288,23 @@ fail:
 
 static void socket_enter_signal(Socket *s, SocketState state, SocketResult f) {
         int r;
-        Set *pid_set = NULL;
-        bool wait_for_exit = false;
 
         assert(s);
 
         if (f != SOCKET_SUCCESS)
                 s->result = f;
 
-        if (s->kill_context.kill_mode != KILL_NONE) {
-                int sig = (state == SOCKET_STOP_PRE_SIGTERM || state == SOCKET_FINAL_SIGTERM) ? s->kill_context.kill_signal : SIGKILL;
-
-                if (s->control_pid > 0) {
-                        if (kill_and_sigcont(s->control_pid, sig) < 0 && errno != ESRCH)
-
-                                log_warning_unit(UNIT(s)->id,
-                                                 "Failed to kill control process %li: %m",
-                                                 (long) s->control_pid);
-                        else
-                                wait_for_exit = true;
-                }
-
-                if (s->kill_context.kill_mode == KILL_CONTROL_GROUP) {
-
-                        if (!(pid_set = set_new(trivial_hash_func, trivial_compare_func))) {
-                                r = -ENOMEM;
-                                goto fail;
-                        }
-
-                        /* Exclude the control pid from being killed via the cgroup */
-                        if (s->control_pid > 0)
-                                if ((r = set_put(pid_set, LONG_TO_PTR(s->control_pid))) < 0)
-                                        goto fail;
-
-                        r = cgroup_bonding_kill_list(UNIT(s)->cgroup_bondings, sig, true, false, pid_set, NULL);
-                        if (r < 0) {
-                                if (r != -EAGAIN && r != -ESRCH && r != -ENOENT)
-                                        log_warning_unit(UNIT(s)->id,
-                                                         "Failed to kill control group: %s",
-                                                         strerror(-r));
-                        } else if (r > 0)
-                                wait_for_exit = true;
-
-                        set_free(pid_set);
-                        pid_set = NULL;
-                }
-        }
+        r = unit_kill_context(
+                        UNIT(s),
+                        &s->kill_context,
+                        state != SOCKET_STOP_PRE_SIGTERM && state != SOCKET_FINAL_SIGTERM,
+                        -1,
+                        s->control_pid,
+                        false);
+        if (r < 0)
+                goto fail;
 
-        if (wait_for_exit) {
+        if (r > 0) {
                 r = unit_watch_timer(UNIT(s), CLOCK_MONOTONIC, true, s->timeout_usec, &s->timer_watch);
                 if (r < 0)
                         goto fail;
@@ -1357,9 +1326,6 @@ fail:
                 socket_enter_stop_post(s, SOCKET_FAILURE_RESOURCES);
         else
                 socket_enter_dead(s, SOCKET_FAILURE_RESOURCES);
-
-        if (pid_set)
-                set_free(pid_set);
 }
 
 static void socket_enter_stop_pre(Socket *s, SocketResult f) {
@@ -2388,13 +2354,15 @@ DEFINE_STRING_TABLE_LOOKUP(socket_result, SocketResult);
 
 const UnitVTable socket_vtable = {
         .object_size = sizeof(Socket),
-        .exec_context_offset = offsetof(Socket, exec_context),
 
         .sections =
                 "Unit\0"
                 "Socket\0"
                 "Install\0",
 
+        .exec_context_offset = offsetof(Socket, exec_context),
+        .exec_section = "Socket",
+
         .init = socket_init,
         .done = socket_done,
         .load = socket_load,