summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/libfrr.c2
-rw-r--r--lib/module.c12
-rw-r--r--lib/module.h1
3 files changed, 15 insertions, 0 deletions
diff --git a/lib/libfrr.c b/lib/libfrr.c
index 328c6ec8b2..8ea38368b7 100644
--- a/lib/libfrr.c
+++ b/lib/libfrr.c
@@ -1267,6 +1267,8 @@ void frr_fini(void)
/* frrmod_init -> nothing needed / hooks */
rcu_shutdown();
+ frrmod_terminate();
+
/* also log memstats to stderr when stderr goes to a file*/
if (debug_memstats_at_exit || !isatty(STDERR_FILENO))
have_leftovers = log_memstats(stderr, di->name);
diff --git a/lib/module.c b/lib/module.c
index af7d20c3da..9d178bb0e4 100644
--- a/lib/module.c
+++ b/lib/module.c
@@ -202,3 +202,15 @@ void frrmod_unload(struct frrmod_runtime *module)
{
}
#endif
+
+void frrmod_terminate(void)
+{
+ struct frrmod_runtime *rtinfo = frrmod_list;
+
+ while (rtinfo) {
+ XFREE(MTYPE_MODULE_LOADNAME, rtinfo->load_name);
+ XFREE(MTYPE_MODULE_LOADARGS, rtinfo->load_args);
+
+ rtinfo = rtinfo->next;
+ }
+}
diff --git a/lib/module.h b/lib/module.h
index cd2be474e7..1810b335f6 100644
--- a/lib/module.h
+++ b/lib/module.h
@@ -79,6 +79,7 @@ extern union _frrmod_runtime_u _frrmod_this_module;
extern struct frrmod_runtime *frrmod_list;
extern void frrmod_init(struct frrmod_runtime *modinfo);
+extern void frrmod_terminate(void);
extern struct frrmod_runtime *frrmod_load(const char *spec, const char *dir,
void (*pFerrlog)(const void *,
const char *),