zebra: during shutdown processing, drop dplane results

Don't process dataplane results in zebra during shutdown (after
sigint has been seen). The dplane continues to run in order to
clean up, but zebra main just drops results.

Signed-off-by: Mark Stapp <mjs@voltanet.io>
This commit is contained in:
Mark Stapp 2019-09-27 12:15:34 -04:00
parent 5300176ff8
commit 2fc69f03d2
3 changed files with 21 additions and 0 deletions

View file

@ -142,6 +142,9 @@ static void sigint(void)
zlog_notice("Terminating on signal");
atomic_store_explicit(&zrouter.in_shutdown, true,
memory_order_relaxed);
frr_early_fini();
zebra_dplane_pre_finish();

View file

@ -3204,6 +3204,7 @@ static int rib_process_dplane_results(struct thread *thread)
{
struct zebra_dplane_ctx *ctx;
struct dplane_ctx_q ctxlist;
bool shut_p = false;
/* Dequeue a list of completed updates with one lock/unlock cycle */
@ -3223,6 +3224,21 @@ static int rib_process_dplane_results(struct thread *thread)
if (ctx == NULL)
break;
/* If zebra is shutting down, avoid processing results,
* just drain the results queue.
*/
shut_p = atomic_load_explicit(&zrouter.in_shutdown,
memory_order_relaxed);
if (shut_p) {
while (ctx) {
dplane_ctx_fini(&ctx);
ctx = dplane_ctx_dequeue(&ctxlist);
}
continue;
}
while (ctx) {
switch (dplane_ctx_get_op(ctx)) {
case DPLANE_OP_ROUTE_INSTALL:

View file

@ -74,6 +74,8 @@ struct zebra_mlag_info {
};
struct zebra_router {
atomic_bool in_shutdown;
/* Thread master */
struct thread_master *master;