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.
This commit is contained in:
Jiří Klimeš 2014-06-20 14:50:18 +02:00
parent c0822f6054
commit 7e75ccea7f
3 changed files with 16 additions and 2 deletions

View file

@ -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 ()) {

View file

@ -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:

View file

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