lkml.org 
[lkml]   [2021]   [Jan]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 15/22] perf daemon: Use control to stop session
    Date
    Using 'stop' control command to stop perf record session.
    If that fails, falling back to current SIGTERM/SIGKILL pair.

    Signed-off-by: Jiri Olsa <jolsa@kernel.org>
    ---
    tools/perf/builtin-daemon.c | 56 ++++++++++++++++++++++++++++++-------
    1 file changed, 46 insertions(+), 10 deletions(-)

    diff --git a/tools/perf/builtin-daemon.c b/tools/perf/builtin-daemon.c
    index 260bcffd9ae8..e45a1acaad18 100644
    --- a/tools/perf/builtin-daemon.c
    +++ b/tools/perf/builtin-daemon.c
    @@ -502,11 +502,33 @@ session__control(struct session *session, const char *msg, bool do_ack)

    static void session__kill(struct session *session, struct daemon *daemon)
    {
    - session__signal(session, SIGTERM);
    - if (session__wait(session, daemon, 10)) {
    - session__signal(session, SIGKILL);
    - session__wait(session, daemon, 10);
    - }
    + int how = 0;
    +
    + do {
    + switch (how) {
    + case 0:
    + session__control(session, "stop", false);
    + break;
    + case 1:
    + session__signal(session, SIGTERM);
    + break;
    + case 2:
    + session__signal(session, SIGKILL);
    + break;
    + default:
    + break;
    + }
    + how++;
    +
    + } while (session__wait(session, daemon, 10));
    +}
    +
    +static void daemon__stop(struct daemon *daemon)
    +{
    + struct session *session;
    +
    + list_for_each_entry(session, &daemon->sessions, list)
    + session__control(session, "stop", false);
    }

    static int daemon__reconfig(struct daemon *daemon)
    @@ -545,11 +567,25 @@ static int daemon__reconfig(struct daemon *daemon)

    static void daemon__kill(struct daemon *daemon)
    {
    - daemon__signal(daemon, SIGTERM);
    - if (daemon__wait(daemon, 10)) {
    - daemon__signal(daemon, SIGKILL);
    - daemon__wait(daemon, 10);
    - }
    + int how = 0;
    +
    + do {
    + switch (how) {
    + case 0:
    + daemon__stop(daemon);
    + break;
    + case 1:
    + daemon__signal(daemon, SIGTERM);
    + break;
    + case 2:
    + daemon__signal(daemon, SIGKILL);
    + break;
    + default:
    + break;
    + }
    + how++;
    +
    + } while (daemon__wait(daemon, 10));
    }

    static void daemon__free(struct daemon *daemon)
    --
    2.26.2
    \
     
     \ /
      Last update: 2021-01-02 23:11    [W:4.211 / U:0.396 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site