diff options
| author | Mobashshera Rasool <mrasool@vmware.com> | 2023-11-07 21:45:00 -0800 |
|---|---|---|
| committer | Mobashshera Rasool <mrasool@vmware.com> | 2023-11-14 02:29:44 -0800 |
| commit | 79297070481860ce55fd38a22a6ff6d8587099a2 (patch) | |
| tree | b69594e3120c2f38b32f247bbdf8f1ea2b10b87b /pimd/pim6_main.c | |
| parent | 19bcca4f2e9a3ee3c8cc16608dcf303241bbf014 (diff) | |
pim6d: Fix memory leaks
Problem Statement:
========================
Mentioning few of the leaks here:
=3843268== 6 bytes in 3 blocks are still reachable in loss record 1 of 29
==3843268== at 0x483C855: malloc (vg_replace_malloc.c:381)
==3843268== by 0x489ED0E: qmalloc (memory.c:106)
==3843268== by 0x48DE8DB: redist_add_instance (zclient.c:125)
==3843268== by 0x48DF561: zclient_init (zclient.c:647)
==3843268== by 0x14FFA3: pim_zebra_init (pim_zebra.c:527)
==3843268== by 0x11D021: main (pim6_main.c:178)
==3843268==
==3843268== 24 bytes in 1 blocks are still reachable in loss record 2 of 29
==3843268== at 0x484147B: calloc (vg_replace_malloc.c:1328)
==3843268== by 0x489EE03: qcalloc (memory.c:111)
==3843268== by 0x4878DDE: buffer_new (buffer.c:72)
==3843268== by 0x48DE7BF: zclient_new (zclient.c:75)
==3843268== by 0x14FF1D: pim_zebra_init (pim_zebra.c:516)
==3843268== by 0x11D021: main (pim6_main.c:178)
==3843268==
==3843268== 24 bytes in 1 blocks are still reachable in loss record 3 of 29
==3843268== at 0x484147B: calloc (vg_replace_malloc.c:1328)
==3843268== by 0x489EE03: qcalloc (memory.c:111)
==3843268== by 0x4878DDE: buffer_new (buffer.c:72)
==3843268== by 0x48DE7BF: zclient_new (zclient.c:75)
==3843268== by 0x150A3D: zclient_lookup_new (pim_zlookup.c:131)
==3843268== by 0x11D021: main (pim6_main.c:178)
RCA:
=======================
Memory is allocated when the daemon started but
it is not freed when terminated.
Fix:
=======================
Freeing the memory when daemon goes down.
Signed-off-by: Mobashshera Rasool <mrasool@vmware.com>
Diffstat (limited to 'pimd/pim6_main.c')
| -rw-r--r-- | pimd/pim6_main.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/pimd/pim6_main.c b/pimd/pim6_main.c index 1af4a17e5b..5ce6985c45 100644 --- a/pimd/pim6_main.c +++ b/pimd/pim6_main.c @@ -26,6 +26,7 @@ #include "pim_nb.h" #include "pim6_cmd.h" #include "pim6_mld.h" +#include "pim_zlookup.h" zebra_capabilities_t _caps_p[] = { ZCAP_SYS_ADMIN, @@ -189,11 +190,20 @@ int main(int argc, char **argv, char **envp) static void pim6_terminate(void) { + struct zclient *zclient; + pim_vrf_terminate(); pim_router_terminate(); prefix_list_reset(); access_list_reset(); + zclient = pim_zebra_zclient_get(); + if (zclient) { + zclient_stop(zclient); + zclient_free(zclient); + } + + zclient_lookup_free(); frr_fini(); } |
