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 */