aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDave Barach <dave@barachs.net>2019-03-21 18:01:48 -0400
committerYichen Wang <yicwang@cisco.com>2019-03-25 23:08:09 +0000
commit327fbae5959f52c7fe670d8d204faaf2c8781a17 (patch)
treed69b004fece348badcd55e66e132c86c12fefc02
parent0d961549c08ccc6d25cf384fdc8a1c982384219e (diff)
Ignore SIGTERM during the vpp boot sequence
Call setjmp and mark the setjmp context valid just prior to entering the vpp main loop. Change-Id: I26d5cd6a624cb2a497d81eb85a62365621b3b469 Signed-off-by: Dave Barach <dave@barachs.net> (cherry picked from commit d1e17d00bb81659bf9e45caa62482bf7029d98f7)
-rw-r--r--src/vlib/main.c22
-rwxr-xr-xsrc/vlib/unix/main.c7
2 files changed, 17 insertions, 12 deletions
diff --git a/src/vlib/main.c b/src/vlib/main.c
index 049d80d9d17..ba0b2ccde98 100644
--- a/src/vlib/main.c
+++ b/src/vlib/main.c
@@ -2013,6 +2013,17 @@ vlib_main (vlib_main_t * volatile vm, unformat_input_t * input)
vec_validate (vm->processing_rpc_requests, 0);
_vec_len (vm->processing_rpc_requests) = 0;
+ if ((error = vlib_call_all_config_functions (vm, input, 0 /* is_early */ )))
+ goto done;
+
+ /* Call all main loop enter functions. */
+ {
+ clib_error_t *sub_error;
+ sub_error = vlib_call_all_main_loop_enter_functions (vm);
+ if (sub_error)
+ clib_error_report (sub_error);
+ }
+
switch (clib_setjmp (&vm->main_loop_exit, VLIB_MAIN_LOOP_EXIT_NONE))
{
case VLIB_MAIN_LOOP_EXIT_NONE:
@@ -2027,17 +2038,6 @@ vlib_main (vlib_main_t * volatile vm, unformat_input_t * input)
goto done;
}
- if ((error = vlib_call_all_config_functions (vm, input, 0 /* is_early */ )))
- goto done;
-
- /* Call all main loop enter functions. */
- {
- clib_error_t *sub_error;
- sub_error = vlib_call_all_main_loop_enter_functions (vm);
- if (sub_error)
- clib_error_report (sub_error);
- }
-
vlib_main_loop (vm);
done:
diff --git a/src/vlib/unix/main.c b/src/vlib/unix/main.c
index 08f0506fbc2..c0e6770290f 100755
--- a/src/vlib/unix/main.c
+++ b/src/vlib/unix/main.c
@@ -104,11 +104,16 @@ unix_signal_handler (int signum, siginfo_t * si, ucontext_t * uc)
{
/* these (caught) signals cause the application to exit */
case SIGTERM:
- if (unix_main.vlib_main->main_loop_exit_set)
+ /*
+ * Ignore SIGTERM if it's sent before we're ready.
+ */
+ if (unix_main.vlib_main && unix_main.vlib_main->main_loop_exit_set)
{
syslog (LOG_ERR | LOG_DAEMON, "received SIGTERM, exiting...");
unix_main.vlib_main->main_loop_exit_now = 1;
}
+ else
+ syslog (LOG_ERR | LOG_DAEMON, "IGNORE early SIGTERM...");
break;
/* fall through */
case SIGQUIT: