From 8879bd22672c9d2987dd5d4645a603ca060c0c3f Mon Sep 17 00:00:00 2001 From: Renato Westphal Date: Mon, 11 Sep 2017 23:05:16 -0300 Subject: [PATCH] *: make all daemons call frr_fini() on exit This allow us to find real leaks more easily with tools like valgrind. Signed-off-by: Renato Westphal --- babeld/babel_main.c | 1 + eigrpd/eigrpd.c | 7 +++---- isisd/isis_zebra.c | 2 ++ ospfd/ospfd.c | 3 +++ pimd/pimd.c | 2 ++ ripd/rip_main.c | 1 + ripngd/ripng_main.c | 1 + 7 files changed, 13 insertions(+), 4 deletions(-) diff --git a/babeld/babel_main.c b/babeld/babel_main.c index 54626a4ae..6a8f9bb75 100644 --- a/babeld/babel_main.c +++ b/babeld/babel_main.c @@ -335,6 +335,7 @@ babel_exit_properly(void) babel_save_state_file(); debugf(BABEL_DEBUG_COMMON, "Remove pid file."); debugf(BABEL_DEBUG_COMMON, "Done."); + frr_fini(); exit(0); } diff --git a/eigrpd/eigrpd.c b/eigrpd/eigrpd.c index 99d88b2d0..ee60898f8 100644 --- a/eigrpd/eigrpd.c +++ b/eigrpd/eigrpd.c @@ -42,6 +42,7 @@ #include "plist.h" #include "sockopt.h" #include "keychain.h" +#include "libfrr.h" #include "eigrpd/eigrp_structs.h" #include "eigrpd/eigrpd.h" @@ -241,12 +242,10 @@ void eigrp_terminate(void) SET_FLAG(eigrp_om->options, EIGRP_MASTER_SHUTDOWN); - /* exit immediately if EIGRP not actually running */ - if (listcount(eigrp_om->eigrp) == 0) - exit(0); - for (ALL_LIST_ELEMENTS(eigrp_om->eigrp, node, nnode, eigrp)) eigrp_finish(eigrp); + + frr_fini(); } void eigrp_finish(struct eigrp *eigrp) diff --git a/isisd/isis_zebra.c b/isisd/isis_zebra.c index ed96bd31c..99eb698b7 100644 --- a/isisd/isis_zebra.c +++ b/isisd/isis_zebra.c @@ -35,6 +35,7 @@ #include "linklist.h" #include "nexthop.h" #include "vrf.h" +#include "libfrr.h" #include "isisd/dict.h" #include "isisd/isis_constants.h" @@ -427,4 +428,5 @@ void isis_zebra_stop(void) { zclient_stop(zclient); zclient_free(zclient); + frr_fini(); } diff --git a/ospfd/ospfd.c b/ospfd/ospfd.c index 20cee713b..ed1d8901f 100644 --- a/ospfd/ospfd.c +++ b/ospfd/ospfd.c @@ -35,6 +35,7 @@ #include "plist.h" #include "sockopt.h" #include "bfd.h" +#include "libfrr.h" #include "defaults.h" #include "ospfd/ospfd.h" @@ -489,6 +490,8 @@ void ospf_terminate(void) */ zclient_stop(zclient); zclient_free(zclient); + + frr_fini(); } void ospf_finish(struct ospf *ospf) diff --git a/pimd/pimd.c b/pimd/pimd.c index 9a8e92cbb..37c79d455 100644 --- a/pimd/pimd.c +++ b/pimd/pimd.c @@ -139,4 +139,6 @@ void pim_terminate() zclient_stop(zclient); zclient_free(zclient); } + + frr_fini(); } diff --git a/ripd/rip_main.c b/ripd/rip_main.c index 91b623beb..9a448e895 100644 --- a/ripd/rip_main.c +++ b/ripd/rip_main.c @@ -89,6 +89,7 @@ static void sigint(void) rip_clean(); rip_zclient_stop(); + frr_fini(); exit(0); } diff --git a/ripngd/ripng_main.c b/ripngd/ripng_main.c index 0cb54d433..8ef27daab 100644 --- a/ripngd/ripng_main.c +++ b/ripngd/ripng_main.c @@ -92,6 +92,7 @@ static void sigint(void) ripng_clean(); ripng_zebra_stop(); + frr_fini(); exit(0); } -- 2.39.5