forked from Mirror/frr
sharpd: Clean up memory leaks on shutdown
a) The cleanup of zclient on shutdown was not being done b) Cleanup vrf shutdown c) Cleanup some lists Signed-off-by: Donald Sharp <sharpd@nvidia.com> sharpd: Cleanup shutdown of vrf and some lists Signed-off-by: Donald Sharp <sharpd@nvidia.com>
This commit is contained in:
parent
0e44d248a0
commit
b01738f4d3
|
@ -54,6 +54,22 @@ struct zebra_privs_t sharp_privs = {
|
|||
|
||||
struct option longopts[] = {{0}};
|
||||
|
||||
struct sharp_global sg;
|
||||
|
||||
static void sharp_global_init(void)
|
||||
{
|
||||
memset(&sg, 0, sizeof(sg));
|
||||
sg.nhs = list_new();
|
||||
sg.ted = NULL;
|
||||
sg.srv6_locators = list_new();
|
||||
}
|
||||
|
||||
static void sharp_global_destroy(void)
|
||||
{
|
||||
list_delete(&sg.nhs);
|
||||
list_delete(&sg.srv6_locators);
|
||||
}
|
||||
|
||||
/* Master of threads. */
|
||||
struct event_loop *master;
|
||||
|
||||
|
@ -68,6 +84,11 @@ static void sigint(void)
|
|||
{
|
||||
zlog_notice("Terminating on signal");
|
||||
|
||||
vrf_terminate();
|
||||
sharp_zebra_terminate();
|
||||
|
||||
sharp_global_destroy();
|
||||
|
||||
frr_fini();
|
||||
|
||||
exit(0);
|
||||
|
@ -118,16 +139,6 @@ FRR_DAEMON_INFO(sharpd, SHARP, .vty_port = SHARP_VTY_PORT,
|
|||
.n_yang_modules = array_size(sharpd_yang_modules),
|
||||
);
|
||||
|
||||
struct sharp_global sg;
|
||||
|
||||
static void sharp_global_init(void)
|
||||
{
|
||||
memset(&sg, 0, sizeof(sg));
|
||||
sg.nhs = list_new();
|
||||
sg.ted = NULL;
|
||||
sg.srv6_locators = list_new();
|
||||
}
|
||||
|
||||
static void sharp_start_configuration(void)
|
||||
{
|
||||
zlog_debug("Configuration has started to be read");
|
||||
|
|
|
@ -1089,3 +1089,17 @@ void sharp_zebra_init(void)
|
|||
zclient->zebra_connected = zebra_connected;
|
||||
zclient->zebra_buffer_write_ready = sharp_zclient_buffer_ready;
|
||||
}
|
||||
|
||||
void sharp_zebra_terminate(void)
|
||||
{
|
||||
struct sharp_zclient *node = sharp_clients_head;
|
||||
|
||||
while (node) {
|
||||
sharp_zclient_delete(node->client->session_id);
|
||||
|
||||
node = sharp_clients_head;
|
||||
}
|
||||
|
||||
zclient_stop(zclient);
|
||||
zclient_free(zclient);
|
||||
}
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
#define __SHARP_ZEBRA_H__
|
||||
|
||||
extern void sharp_zebra_init(void);
|
||||
extern void sharp_zebra_terminate(void);
|
||||
|
||||
/* Add and delete extra zapi client sessions, for testing */
|
||||
int sharp_zclient_create(uint32_t session_id);
|
||||
|
|
Loading…
Reference in a new issue