Commit 4a1a9971 authored by Jiri Olsa's avatar Jiri Olsa Committed by Arnaldo Carvalho de Melo

perf top: Setup signals for terminal output

The TUI code setup standard signals handling, while the stdio display
code does not. This leads to premature termination of display thread
when signal is received and leaving terminal in wrong state.

Also adding terminal cleanup at the end of display thread, to ensure we
get the old terminal state in case of signal interruption.
Signed-off-by: default avatarJiri Olsa <jolsa@kernel.org>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Corey Ashford <cjashfor@linux.vnet.ibm.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Jean Pihet <jean.pihet@linaro.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/1407747014-18394-14-git-send-email-jolsa@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent 9398c484
...@@ -577,6 +577,20 @@ static void *display_thread_tui(void *arg) ...@@ -577,6 +577,20 @@ static void *display_thread_tui(void *arg)
return NULL; return NULL;
} }
static void display_sig(int sig __maybe_unused)
{
done = 1;
}
static void display_setup_sig(void)
{
signal(SIGSEGV, display_sig);
signal(SIGFPE, display_sig);
signal(SIGINT, display_sig);
signal(SIGQUIT, display_sig);
signal(SIGTERM, display_sig);
}
static void *display_thread(void *arg) static void *display_thread(void *arg)
{ {
struct pollfd stdin_poll = { .fd = 0, .events = POLLIN }; struct pollfd stdin_poll = { .fd = 0, .events = POLLIN };
...@@ -584,6 +598,7 @@ static void *display_thread(void *arg) ...@@ -584,6 +598,7 @@ static void *display_thread(void *arg)
struct perf_top *top = arg; struct perf_top *top = arg;
int delay_msecs, c; int delay_msecs, c;
display_setup_sig();
pthread__unblock_sigwinch(); pthread__unblock_sigwinch();
repeat: repeat:
delay_msecs = top->delay_secs * 1000; delay_msecs = top->delay_secs * 1000;
...@@ -614,6 +629,7 @@ static void *display_thread(void *arg) ...@@ -614,6 +629,7 @@ static void *display_thread(void *arg)
} }
} }
tcsetattr(0, TCSAFLUSH, &save);
return NULL; return NULL;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment