From 7e75ccea7f63503c0a82f67da81c2945cfcc6867 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ji=C5=99=C3=AD=20Klime=C5=A1?= Date: Fri, 20 Jun 2014 14:50:18 +0200 Subject: [PATCH] cli: don't print "Error: nmcli terminated by signal Quit (3)" on Ctrl-D Also make sure we don't print anything before quitting on Ctrl-D. --- cli/src/common.c | 4 ++++ cli/src/nmcli.c | 12 ++++++++++-- cli/src/nmcli.h | 2 ++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/cli/src/common.c b/cli/src/common.c index a676077e36..63399dd2c8 100644 --- a/cli/src/common.c +++ b/cli/src/common.c @@ -1162,7 +1162,11 @@ readline_mark: /* We quit on Ctrl-D when line is empty */ if (str == NULL) { /* Send SIGQUIT to itself */ + nmc_set_sigquit_internal (); kill (getpid (), SIGQUIT); + /* Sleep in this thread so that we don't do anything else until exit */ + for (;;) + sleep (3); } /* In case of Ctrl-C we call readline again to get new prompt (repeat) */ if (nmc_seen_sigint ()) { diff --git a/cli/src/nmcli.c b/cli/src/nmcli.c index 182afe11d9..b4d81ff693 100644 --- a/cli/src/nmcli.c +++ b/cli/src/nmcli.c @@ -274,6 +274,7 @@ parse_command_line (NmCli *nmc, int argc, char **argv) static gboolean nmcli_sigint = FALSE; static pthread_mutex_t sigint_mutex = PTHREAD_MUTEX_INITIALIZER; +static gboolean nmcli_sigquit_internal = FALSE; gboolean nmc_seen_sigint (void) @@ -294,6 +295,12 @@ nmc_clear_sigint (void) pthread_mutex_unlock (&sigint_mutex); } +void +nmc_set_sigquit_internal (void) +{ + nmcli_sigquit_internal = TRUE; +} + static int event_hook_for_readline (void) { @@ -339,8 +346,9 @@ signal_handling_thread (void *arg) { case SIGQUIT: case SIGTERM: nmc_cleanup_readline (); - printf (_("\nError: nmcli terminated by signal %s (%d)\n"), - strsignal (signo), signo); + if (!nmcli_sigquit_internal) + printf (_("\nError: nmcli terminated by signal %s (%d)\n"), + strsignal (signo), signo); exit (1); break; default: diff --git a/cli/src/nmcli.h b/cli/src/nmcli.h index 4d304cd568..dd5b7d194d 100644 --- a/cli/src/nmcli.h +++ b/cli/src/nmcli.h @@ -139,5 +139,7 @@ GQuark nmcli_error_quark (void); gboolean nmc_seen_sigint (void); void nmc_clear_sigint (void); +void nmc_set_sigquit_internal (void); + #endif /* NMC_NMCLI_H */