diff options
| author | Donald Sharp <sharpd@nvidia.com> | 2024-08-08 13:54:12 -0400 |
|---|---|---|
| committer | Donald Sharp <sharpd@nvidia.com> | 2024-08-08 14:24:59 -0400 |
| commit | db986aded4eb6b3bd76010c196378f43b6e02015 (patch) | |
| tree | 9950c224c87445be788762cbd7ac552f069a4db0 | |
| parent | bc16c8ce8d928e4f59f106a4beea0b29fdbe4b44 (diff) | |
lib: Cleanup memory associated with modules on shutdown
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
| -rw-r--r-- | lib/libfrr.c | 2 | ||||
| -rw-r--r-- | lib/module.c | 12 | ||||
| -rw-r--r-- | lib/module.h | 1 |
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 *), |
