lkml.org 
[lkml]   [2018]   [Sep]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.9 47/78] selftests/powerpc: Kill child processes on SIGINT
    Date
    4.9-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Breno Leitao <leitao@debian.org>

    [ Upstream commit 7c27a26e1ed5a7dd709aa19685d2c98f64e1cf0c ]

    There are some powerpc selftests, as tm/tm-unavailable, that run for a long
    period (>120 seconds), and if it is interrupted, as pressing CRTL-C
    (SIGINT), the foreground process (harness) dies but the child process and
    threads continue to execute (with PPID = 1 now) in background.

    In this case, you'd think the whole test exited, but there are remaining
    threads and processes being executed in background. Sometimes these
    zombies processes are doing annoying things, as consuming the whole CPU or
    dumping things to STDOUT.

    This patch fixes this problem by attaching an empty signal handler to
    SIGINT in the harness process. This handler will interrupt (EINTR) the
    parent process waitpid() call, letting the code to follow through the
    normal flow, which will kill all the processes in the child process group.

    This patch also fixes a typo.

    Signed-off-by: Breno Leitao <leitao@debian.org>
    Signed-off-by: Gustavo Romero <gromero@linux.vnet.ibm.com>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    tools/testing/selftests/powerpc/harness.c | 18 ++++++++++++------
    1 file changed, 12 insertions(+), 6 deletions(-)

    --- a/tools/testing/selftests/powerpc/harness.c
    +++ b/tools/testing/selftests/powerpc/harness.c
    @@ -85,13 +85,13 @@ wait:
    return status;
    }

    -static void alarm_handler(int signum)
    +static void sig_handler(int signum)
    {
    - /* Jut wake us up from waitpid */
    + /* Just wake us up from waitpid */
    }

    -static struct sigaction alarm_action = {
    - .sa_handler = alarm_handler,
    +static struct sigaction sig_action = {
    + .sa_handler = sig_handler,
    };

    void test_harness_set_timeout(uint64_t time)
    @@ -106,8 +106,14 @@ int test_harness(int (test_function)(voi
    test_start(name);
    test_set_git_version(GIT_VERSION);

    - if (sigaction(SIGALRM, &alarm_action, NULL)) {
    - perror("sigaction");
    + if (sigaction(SIGINT, &sig_action, NULL)) {
    + perror("sigaction (sigint)");
    + test_error(name);
    + return 1;
    + }
    +
    + if (sigaction(SIGALRM, &sig_action, NULL)) {
    + perror("sigaction (sigalrm)");
    test_error(name);
    return 1;
    }

    \
     
     \ /
      Last update: 2018-09-13 15:41    [W:3.213 / U:0.184 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site