daandemeyer / rpms / systemd

Forked from rpms/systemd 2 years ago
Clone
9fc0f6
From d09b7328c7757cebdc2fb0032361c086733bd3f7 Mon Sep 17 00:00:00 2001
9fc0f6
From: Lukas Nykryn <lnykryn@redhat.com>
9fc0f6
Date: Mon, 10 Mar 2014 15:11:29 +0100
9fc0f6
Subject: [PATCH] service: don't create extra cgroup for control process when
9fc0f6
 reloading SysV service
9fc0f6
9fc0f6
Unfortunately common practice in initscripts is to have reload as an
9fc0f6
alias for restart (https://fedoraproject.org/wiki/Packaging:SysVInitScript).
9fc0f6
In that case the newly started process will be killed immediately after
9fc0f6
the reload process ends and its cgroup is destroyed.
9fc0f6
---
9fc0f6
 src/core/service.c | 13 ++++++++++++-
9fc0f6
 1 file changed, 12 insertions(+), 1 deletion(-)
9fc0f6
9fc0f6
diff --git a/src/core/service.c b/src/core/service.c
9fc0f6
index 41e5cb5..dff5286 100644
9fc0f6
--- a/src/core/service.c
9fc0f6
+++ b/src/core/service.c
9fc0f6
@@ -2353,7 +2353,15 @@ static void service_enter_reload(Service *s) {
9fc0f6
                                   !s->root_directory_start_only,
9fc0f6
                                   false,
9fc0f6
                                   false,
9fc0f6
+#ifdef HAVE_SYSV_COMPAT
9fc0f6
+                                  /* Don't create extra cgroup for SysV services.
9fc0f6
+                                   * Unfortunately common practice was to have reload as an alias
9fc0f6
+                                   * for restart and we are killing the new main process, when destroying
9fc0f6
+                                   * cgroup for the control process*/
9fc0f6
+                                  !s->is_sysv,
9fc0f6
+#else
9fc0f6
                                   true,
9fc0f6
+#endif
9fc0f6
                                   &s->control_pid);
9fc0f6
                 if (r < 0)
9fc0f6
                         goto fail;
9fc0f6
@@ -3174,7 +3182,10 @@ static void service_sigchld_event(Unit *u, pid_t pid, int code, int status) {
9fc0f6
                 /* Immediately get rid of the cgroup, so that the
9fc0f6
                  * kernel doesn't delay the cgroup empty messages for
9fc0f6
                  * the service cgroup any longer than necessary */
9fc0f6
-                service_kill_control_processes(s);
9fc0f6
+#ifdef HAVE_SYSV_COMPAT
9fc0f6
+                if (!s->is_sysv)
9fc0f6
+#endif
9fc0f6
+                        service_kill_control_processes(s);
9fc0f6
 
9fc0f6
                 if (s->control_command &&
9fc0f6
                     s->control_command->command_next &&