From 296303037d75af3ee3b0f64d5e86984d10c00548 Mon Sep 17 00:00:00 2001 From: Maciej Szwed Date: Wed, 22 Apr 2020 15:55:52 +0200 Subject: [PATCH] spdk_top: Handle signals to exit gracefully W/o handling signals we end up with messed up consol after spdk_top exited because of a signal interruption. Signed-off-by: Maciej Szwed Change-Id: I5d70d43c7a61d94c071451fa2f3f86f700dad068 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/1974 Community-CI: Mellanox Build Bot Tested-by: SPDK CI Jenkins Reviewed-by: Jim Harris Reviewed-by: Ben Walker --- app/spdk_top/spdk_top.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/app/spdk_top/spdk_top.c b/app/spdk_top/spdk_top.c index ca20e4420..a5f041d4f 100644 --- a/app/spdk_top/spdk_top.c +++ b/app/spdk_top/spdk_top.c @@ -1857,6 +1857,14 @@ draw_interface(void) doupdate(); } +static void finish(int sig) +{ + /* End ncurses mode */ + endwin(); + spdk_jsonrpc_client_close(g_rpc_client); + exit(0); +} + static void setup_ncurses(void) { @@ -1875,6 +1883,11 @@ setup_ncurses(void) printf("Your terminal does not support color\n"); exit(1); } + + /* Handle signals to exit gracfully cleaning up ncurses */ + (void) signal(SIGINT, finish); + (void) signal(SIGPIPE, finish); + (void) signal(SIGABRT, finish); } static void @@ -1916,10 +1929,7 @@ int main(int argc, char **argv) draw_interface(); show_stats(); - /* End curses mode */ - endwin(); - - spdk_jsonrpc_client_close(g_rpc_client); + finish(0); return (0); }