diff options
author | Dave Barach <dave@barachs.net> | 2017-10-13 19:16:56 -0400 |
---|---|---|
committer | Damjan Marion <dmarion.lists@gmail.com> | 2017-10-14 09:08:41 +0000 |
commit | 903651caf320dfdaabd20a0e6f3cd0ffc843e02f (patch) | |
tree | 2a747a9ea4398e73d5695989f4b0c807b4ff93a8 /src/vlib/unix | |
parent | f9342023c19887da656133e2688a90d70383b0c5 (diff) |
VPP-1029: Don't call clib_longjmp(...) directly from the SIGTERM handler
It's way too easy to imagine leaving a mutex or a spin-lock held in
the /vpe-api shared-memory segment, or elsewhere. Set a volatile
variable and check it in a safe place...
Change-Id: I9d91c38cffeb921143c272162d055c9c24a6c312
Signed-off-by: Dave Barach <dave@barachs.net>
Diffstat (limited to 'src/vlib/unix')
-rw-r--r-- | src/vlib/unix/main.c | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/src/vlib/unix/main.c b/src/vlib/unix/main.c index ed0631ec871..f286c870b80 100644 --- a/src/vlib/unix/main.c +++ b/src/vlib/unix/main.c @@ -75,7 +75,7 @@ VLIB_INIT_FUNCTION (unix_main_init); static void unix_signal_handler (int signum, siginfo_t * si, ucontext_t * uc) { - uword fatal; + uword fatal = 0; u8 *msg = 0; msg = format (msg, "received signal %U, PC %U", @@ -91,10 +91,9 @@ unix_signal_handler (int signum, siginfo_t * si, ucontext_t * uc) if (unix_main.vlib_main->main_loop_exit_set) { syslog (LOG_ERR | LOG_DAEMON, "received SIGTERM, exiting..."); - - clib_longjmp (&unix_main.vlib_main->main_loop_exit, - VLIB_MAIN_LOOP_EXIT_CLI); + unix_main.vlib_main->main_loop_exit_now = 1; } + break; /* fall through */ case SIGQUIT: case SIGINT: |