X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvlib%2Fmain.h;h=28412e823a9f4a7b6f36e530389d2b5c7b18290a;hb=82119542a895533e740952cc788076975204f71e;hp=fb67334e4e26f42322f90d2e8851ae5b38e62cec;hpb=eb1ac1732f15f9a99edbeffeb94c525b9ff25c1d;p=vpp.git diff --git a/src/vlib/main.h b/src/vlib/main.h index fb67334e4e2..28412e823a9 100644 --- a/src/vlib/main.h +++ b/src/vlib/main.h @@ -85,6 +85,8 @@ typedef struct vlib_main_t /* Jump target to exit main loop with given code. */ u32 main_loop_exit_set; + /* Set e.g. in the SIGTERM signal handler, checked in a safe place... */ + volatile u32 main_loop_exit_now; clib_longjmp_t main_loop_exit; #define VLIB_MAIN_LOOP_EXIT_NONE 0 #define VLIB_MAIN_LOOP_EXIT_PANIC 1 @@ -208,6 +210,9 @@ typedef struct vlib_main_t /* Earliest barrier can be closed again */ f64 barrier_no_close_before; + /* Vector of pending RPC requests */ + uword *pending_rpc_requests; + } vlib_main_t; /* Global main structure. */ @@ -340,6 +345,9 @@ vlib_increment_main_loop_counter (vlib_main_t * vm) vm->main_loop_nodes_processed = 0; vm->vector_counts_per_main_loop[i] = v; vm->node_counts_per_main_loop[i] = n; + + if (PREDICT_FALSE (vm->main_loop_exit_now)) + clib_longjmp (&vm->main_loop_exit, VLIB_MAIN_LOOP_EXIT_CLI); } always_inline void vlib_set_queue_signal_callback