Bug 1325937 - Regression: killproc ignores -d
Summary: Regression: killproc ignores -d
Keywords:
Status: CLOSED ERRATA
Alias: None
Product: Red Hat Enterprise Linux 6
Classification: Red Hat
Component: initscripts
Version: 6.8
Hardware: Unspecified
OS: Unspecified
unspecified
urgent
Target Milestone: rc
: ---
Assignee: Lukáš Nykrýn
QA Contact: qe-baseos-daemons
URL:
Whiteboard:
Depends On:
Blocks:
TreeView+ depends on / blocked
 
Reported: 2016-04-11 12:54 UTC by Leos Pol
Modified: 2016-11-25 12:58 UTC (History)
2 users (show)

Fixed In Version: initscripts-9.03.53-1.el6
Doc Type: Bug Fix
Doc Text:
Clone Of:
Environment:
Last Closed: 2016-05-11 01:08:13 UTC
Target Upstream Version:


Attachments (Terms of Use)


Links
System ID Private Priority Status Summary Last Updated
Red Hat Product Errata RHBA-2016:0951 0 normal SHIPPED_LIVE initscripts bug fix and enhancement update 2016-05-10 22:56:20 UTC

Description Leos Pol 2016-04-11 12:54:44 UTC
Description of problem:
Regression in the /CoreOS/initscripts/Sanity/bz843386-killproc-function-should-check-if-program-has-exited-several-times-during-delay

Version-Release number of selected component (if applicable):
initscripts-9.03.51-1.el6

How reproducible:
Always

Steps to Reproduce:
1. execute tc#268929

Actual results:
fail

Expected results:
pass

Additional info:
original bug bz843386, works with initscripts-9.03.49-1.el6

Comment 1 Lukáš Nykrýn 2016-04-11 13:00:10 UTC
Possible fix:

diff --git a/rc.d/init.d/functions b/rc.d/init.d/functions
index a72a8b8..3a134ca 100644
--- a/rc.d/init.d/functions
+++ b/rc.d/init.d/functions
@@ -115,6 +115,11 @@ __kill_pids_term_kill() {
     local stat=($(< /proc/self/stat))
     local base_stime=${stat[21]}
 
+    if [ "$1" = "-d" ]; then
+        delay=$2
+        shift 2
+    fi
+
     kill_list=$(__kill_pids_term_kill_checkpids $base_stime $kill_list)
 
     [ -z "$kill_list" ] && return 0
@@ -491,7 +496,7 @@ killproc() {
         if [ -n "$pid" ] ; then
                 [ "$BOOTUP" = "verbose" -a -z "${LSB:-}" ] && echo -n "$base "
                if [ -z "$killlevel" ] ; then
-                   __kill_pids_term_kill $pid
+                   __kill_pids_term_kill -d $delay $pid
                        RC=$?
                        [ "$RC" -eq 0 ] && success $"$base shutdown" || failure $"$base shutdown"
                # use specified level only

Comment 5 Leos Pol 2016-04-12 08:00:25 UTC
Lukas, I've found terrible bug in this patch. 
__kill_pids_term_kill() {
    local try=0
    local delay=3;
    local pid=
    local kill_list=$*    <==== in the kill_list can be also something like -d 60
    local stat=($(< /proc/self/stat))
    local base_stime=${stat[21]}

    if [ "$1" = "-d" ]; then
        delay=$2
        shift 2
    fi

after this __kill_pids_term_kill_checkpids filter out from kill_list "-d", but if a process with pid 60 exists, it stays in the kill_list.

Example:
# ps -p60
  PID TTY          TIME CMD
   60 ?        00:00:00 md/2

# sleep 100 &
[1] 24658
# echo $! > /tmp/pid
# killproc -p /tmp/pid -d 60 sleep
kill_list 60 24658 <==== i've put echo "kill_list $kill_list" just before signaling TERM
[1]+  Terminated              sleep 100

It terms the sleep, but cannot terminate md/2 (thankfully) and waits for 60s because of delay.

Comment 7 Leos Pol 2016-04-12 09:52:38 UTC
Example from comment 5:

initscripts-9.03.52-1.el6: fail
initscripts-9.03.53-1.el6: pass

Comment 9 Leos Pol 2016-04-13 07:51:14 UTC
TestCase passes on all arch with initscripts-9.03.53-1.el6.

Comment 11 errata-xmlrpc 2016-05-11 01:08:13 UTC
Since the problem described in this bug report should be
resolved in a recent advisory, it has been closed with a
resolution of ERRATA.

For information on the advisory, and where to find the updated
files, follow the link below.

If the solution does not work for you, open a new bug report.

https://rhn.redhat.com/errata/RHBA-2016-0951.html


Note You need to log in before you can comment on or make changes to this bug.