commit:     61a9393ce12fda412bdca4002ac71e7df82384df
Author:     Patrick McLean <chutzpah <AT> gentoo <DOT> org>
AuthorDate: Thu Oct 26 02:19:15 2017 +0000
Commit:     William Hubbs <williamh <AT> gentoo <DOT> org>
CommitDate: Thu Oct 26 18:18:16 2017 +0000
URL:        https://gitweb.gentoo.org/proj/openrc.git/commit/?id=61a9393c

cgroups_cleanup: clean up shutdown signaling

- do not sleep for the full 90 seconds if processes are dead
- re-arrange the order of signals we attempt to send to the processes

 sh/rc-cgroup.sh.in | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

diff --git a/sh/rc-cgroup.sh.in b/sh/rc-cgroup.sh.in
index d48957ac..5bc7db54 100644
--- a/sh/rc-cgroup.sh.in
+++ b/sh/rc-cgroup.sh.in
@@ -203,15 +203,21 @@ cgroup_cleanup()
 {
        cgroup_running || return 0
        ebegin "starting cgroups cleanup"
-       local pids
+       local pids loops=0
        pids="$(cgroup_get_pids)"
        if [ -n "${pids}" ]; then
-               kill -s "${stopsig:-TERM}" ${pids} 2> /dev/null
                kill -s CONT ${pids} 2> /dev/null
+               kill -s "${stopsig:-TERM}" ${pids} 2> /dev/null
                yesno "${rc_send_sighup:-no}" &&
                        kill -s HUP ${pids} 2> /dev/null
-               sleep "${rc_timeout_stopsec:-90}"
-               yesno "${rc_send_sigkill:-yes}" &&
+               kill -s "${stopsig:-TERM}" ${pids} 2> /dev/null
+               while [ -n "$(cgroup_get_pids)" ] &&
+                       [ "${loops}" -lt "${rc_timeout_stopsec:-90}" ]; do
+                       loops=$((loops+1))
+                       sleep 1
+               done
+               pids="$(cgroup_get_pids)"
+               [ -n "${pids}" ] && yesno "${rc_send_sigkill:-yes}" &&
                        kill -s KILL ${pids} 2> /dev/null
        fi
        cgroup2_remove

Reply via email to