diff options
author | Arnaldo Carvalho de Melo <acme@redhat.com> | 2011-10-13 08:52:46 -0300 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2011-10-13 08:52:46 -0300 |
commit | 3af6e33867b3814a73c3f3ba991a13d7304ad23a (patch) | |
tree | 28f0f4071736faca07252439a0037e27f0895a53 /tools/perf/builtin-top.c | |
parent | 33e27312aeb05798572ccc456a76321125e8d7cb (diff) | |
download | lwn-3af6e33867b3814a73c3f3ba991a13d7304ad23a.tar.gz lwn-3af6e33867b3814a73c3f3ba991a13d7304ad23a.zip |
perf ui browser: Handle SIGWINCH
To do that we needed to stop using newtForm, as we don't want libnewt to
catch the xterm resize signal.
Remove some more newt calls and instead use the underlying libslang
directly. In time tools/perf will use just libslang.
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/n/tip-h1824yjiru5n2ivz4bseizwj@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf/builtin-top.c')
-rw-r--r-- | tools/perf/builtin-top.c | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/tools/perf/builtin-top.c b/tools/perf/builtin-top.c index c5aebf6eb746..de3cb1e00f9e 100644 --- a/tools/perf/builtin-top.c +++ b/tools/perf/builtin-top.c @@ -585,16 +585,31 @@ static void *display_thread(void *arg __used) tc.c_cc[VMIN] = 0; tc.c_cc[VTIME] = 0; + pthread__unblock_sigwinch(); repeat: delay_msecs = top.delay_secs * 1000; tcsetattr(0, TCSANOW, &tc); /* trash return*/ getc(stdin); - do { + while (1) { print_sym_table(); - } while (!poll(&stdin_poll, 1, delay_msecs) == 1); - + /* + * Either timeout expired or we got an EINTR due to SIGWINCH, + * refresh screen in both cases. + */ + switch (poll(&stdin_poll, 1, delay_msecs)) { + case 0: + continue; + case -1: + if (errno == EINTR) + continue; + /* Fall trhu */ + default: + goto process_hotkey; + } + } +process_hotkey: c = getc(stdin); tcsetattr(0, TCSAFLUSH, &save); |