diff options
author | Lubomir Rintel <lkundrak@v3.sk> | 2018-01-23 14:59:29 +0100 |
---|---|---|
committer | Lubomir Rintel <lkundrak@v3.sk> | 2018-01-24 09:53:38 +0100 |
commit | edf6f826b53cb9f4a4b6306a87b643cb6947cc55 (patch) | |
tree | 344f3914e3ad0c7cf5af113c79a1ba299112b246 /clients/cli/nmcli.c | |
parent | 7e8a84ae10c4868f299e136f183c0f574bb907e1 (diff) | |
download | NetworkManager-edf6f826b53cb9f4a4b6306a87b643cb6947cc55.tar.gz |
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.
Diffstat (limited to 'clients/cli/nmcli.c')
-rw-r--r-- | clients/cli/nmcli.c | 18 |
1 files 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); |