From a49643612006672a03de4c0b13fa4298dc3f58de Mon Sep 17 00:00:00 2001 From: Donald Sharp Date: Fri, 5 May 2023 11:05:12 -0400 Subject: [PATCH] zebra: Reduce creation and fix memory leak of frrscripting pointers There are two issues being addressed: a) The ZEBRA_ON_RIB_PROCESS_HOOK_CALL script point was creating a fs pointer per dplane ctx in rib_process_dplane_results(). b) The fs pointer was not being deleted and directly leaked. For (a) Move the creation of the fs to outside the do while loop. For (b) At function end ensure that the pointer is actually deleted. Signed-off-by: Donald Sharp (cherry picked from commit d8be1399720ca36485b6a2209b143679b01b83cb) --- zebra/zebra_rib.c | 37 ++++++++++++++++++++----------------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/zebra/zebra_rib.c b/zebra/zebra_rib.c index 08391f1a3d..171837610a 100644 --- a/zebra/zebra_rib.c +++ b/zebra/zebra_rib.c @@ -4587,6 +4587,21 @@ static void rib_process_dplane_results(struct thread *thread) struct dplane_ctx_q ctxlist; bool shut_p = false; +#ifdef HAVE_SCRIPTING + char *script_name = + frrscript_names_get_script_name(ZEBRA_ON_RIB_PROCESS_HOOK_CALL); + + int ret = 1; + struct frrscript *fs = NULL; + + if (script_name) { + fs = frrscript_new(script_name); + if (fs) + ret = frrscript_load(fs, ZEBRA_ON_RIB_PROCESS_HOOK_CALL, + NULL); + } +#endif /* HAVE_SCRIPTING */ + /* Dequeue a list of completed updates with one lock/unlock cycle */ do { @@ -4620,24 +4635,7 @@ static void rib_process_dplane_results(struct thread *thread) continue; } -#ifdef HAVE_SCRIPTING - char *script_name = frrscript_names_get_script_name( - ZEBRA_ON_RIB_PROCESS_HOOK_CALL); - - int ret = 1; - struct frrscript *fs; - - if (script_name) { - fs = frrscript_new(script_name); - if (fs) - ret = frrscript_load( - fs, ZEBRA_ON_RIB_PROCESS_HOOK_CALL, - NULL); - } -#endif /* HAVE_SCRIPTING */ - while (ctx) { - #ifdef HAVE_SCRIPTING if (ret == 0) frrscript_call(fs, @@ -4747,6 +4745,11 @@ static void rib_process_dplane_results(struct thread *thread) } } while (1); + +#ifdef HAVE_SCRIPTING + if (fs) + frrscript_delete(fs); +#endif } /* -- 2.39.5