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 <sharpd@nvidia.com>
This commit is contained in:
Donald Sharp 2023-05-05 11:05:12 -04:00
parent 4ead6555c9
commit d8be139972

View File

@ -4704,6 +4704,21 @@ static void rib_process_dplane_results(struct event *thread)
struct dplane_ctx_list_head 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 {
@ -4737,24 +4752,7 @@ static void rib_process_dplane_results(struct event *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,
@ -4869,6 +4867,11 @@ static void rib_process_dplane_results(struct event *thread)
}
} while (1);
#ifdef HAVE_SCRIPTING
if (fs)
frrscript_delete(fs);
#endif
}
/*