From edf6f826b53cb9f4a4b6306a87b643cb6947cc55 Mon Sep 17 00:00:00 2001 From: Lubomir Rintel Date: Tue, 23 Jan 2018 14:59:29 +0100 Subject: [PATCH] nmcli: fix signal handling Hook the signal handlers right before the main loop. Prior to that the default handlers are good enough and our one crashes (due to loop being instantialized). Also, set the return value properly to indicate a termination by a signal. --- clients/cli/nmcli.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/clients/cli/nmcli.c b/clients/cli/nmcli.c index d1c23249f5..76dda05096 100644 --- a/clients/cli/nmcli.c +++ b/clients/cli/nmcli.c @@ -452,15 +452,16 @@ signal_handler (gpointer user_data) if (nmc_get_in_readline ()) { nmcli_sigint = TRUE; } else { - g_print (_("Error: nmcli terminated by signal %s (%d)\n"), - strsignal (signo), - signo); + nm_cli.return_value = 0x80 + signo; + g_string_printf (nm_cli.return_text, _("Error: nmcli terminated by signal %s (%d)"), + strsignal (signo), signo); g_main_loop_quit (loop); } break; case SIGTERM: - g_print (_("Error: nmcli terminated by signal %s (%d)\n"), - strsignal (signo), signo); + nm_cli.return_value = 0x80 + signo; + g_string_printf (nm_cli.return_text, _("Error: nmcli terminated by signal %s (%d)"), + strsignal (signo), signo); nmc_exit (); break; } @@ -629,13 +630,14 @@ main (int argc, char *argv[]) /* Save terminal settings */ tcgetattr (STDIN_FILENO, &termios_orig); - g_unix_signal_add (SIGTERM, signal_handler, GINT_TO_POINTER (SIGTERM)); - g_unix_signal_add (SIGINT, signal_handler, GINT_TO_POINTER (SIGINT)); - nmc_value_transforms_register (); nmc_init (&nm_cli); loop = g_main_loop_new (NULL, FALSE); + + g_unix_signal_add (SIGTERM, signal_handler, GINT_TO_POINTER (SIGTERM)); + g_unix_signal_add (SIGINT, signal_handler, GINT_TO_POINTER (SIGINT)); + if (process_command_line (&nm_cli, argc, argv)) g_main_loop_run (loop);