From 318a8c98b4f8cf29a91da45ad3708a4aaf97c55c Mon Sep 17 00:00:00 2001 From: Donald Sharp Date: Wed, 15 Nov 2023 14:41:18 -0500 Subject: zebra: Cleanup dplane provider owned ctx's on shutdown On shutdown go through and ensure that any contexts the dplane provider holds are freed. Signed-off-by: Donald Sharp --- zebra/zebra_dplane.c | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) (limited to 'zebra') diff --git a/zebra/zebra_dplane.c b/zebra/zebra_dplane.c index 406395123..e1d1e8417 100644 --- a/zebra/zebra_dplane.c +++ b/zebra/zebra_dplane.c @@ -6859,6 +6859,31 @@ static int kernel_dplane_process_func(struct zebra_dplane_provider *prov) return 0; } +static int kernel_dplane_shutdown_func(struct zebra_dplane_provider *prov, + bool early) +{ + struct zebra_dplane_ctx *ctx; + + if (early) + return 1; + + ctx = dplane_provider_dequeue_in_ctx(prov); + while (ctx) { + dplane_ctx_free(&ctx); + + ctx = dplane_provider_dequeue_in_ctx(prov); + } + + ctx = dplane_provider_dequeue_out_ctx(prov); + while (ctx) { + dplane_ctx_free(&ctx); + + ctx = dplane_provider_dequeue_out_ctx(prov); + } + + return 1; +} + #ifdef DPLANE_TEST_PROVIDER /* @@ -6931,12 +6956,10 @@ static void dplane_provider_init(void) { int ret; - ret = dplane_provider_register("Kernel", - DPLANE_PRIO_KERNEL, + ret = dplane_provider_register("Kernel", DPLANE_PRIO_KERNEL, DPLANE_PROV_FLAGS_DEFAULT, NULL, kernel_dplane_process_func, - NULL, - NULL, NULL); + kernel_dplane_shutdown_func, NULL, NULL); if (ret != AOK) zlog_err("Unable to register kernel dplane provider: %d", -- cgit v1.2.3