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 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. */
|
/* Master of threads. */
|
||||||
struct event_loop *master;
|
struct event_loop *master;
|
||||||
|
|
||||||
|
@ -68,6 +84,11 @@ static void sigint(void)
|
||||||
{
|
{
|
||||||
zlog_notice("Terminating on signal");
|
zlog_notice("Terminating on signal");
|
||||||
|
|
||||||
|
vrf_terminate();
|
||||||
|
sharp_zebra_terminate();
|
||||||
|
|
||||||
|
sharp_global_destroy();
|
||||||
|
|
||||||
frr_fini();
|
frr_fini();
|
||||||
|
|
||||||
exit(0);
|
exit(0);
|
||||||
|
@ -118,16 +139,6 @@ FRR_DAEMON_INFO(sharpd, SHARP, .vty_port = SHARP_VTY_PORT,
|
||||||
.n_yang_modules = array_size(sharpd_yang_modules),
|
.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)
|
static void sharp_start_configuration(void)
|
||||||
{
|
{
|
||||||
zlog_debug("Configuration has started to be read");
|
zlog_debug("Configuration has started to be read");
|
||||||
|
|
|
@ -1089,3 +1089,17 @@ void sharp_zebra_init(void)
|
||||||
zclient->zebra_connected = zebra_connected;
|
zclient->zebra_connected = zebra_connected;
|
||||||
zclient->zebra_buffer_write_ready = sharp_zclient_buffer_ready;
|
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__
|
#define __SHARP_ZEBRA_H__
|
||||||
|
|
||||||
extern void sharp_zebra_init(void);
|
extern void sharp_zebra_init(void);
|
||||||
|
extern void sharp_zebra_terminate(void);
|
||||||
|
|
||||||
/* Add and delete extra zapi client sessions, for testing */
|
/* Add and delete extra zapi client sessions, for testing */
|
||||||
int sharp_zclient_create(uint32_t session_id);
|
int sharp_zclient_create(uint32_t session_id);
|
||||||
|
|
Loading…
Reference in a new issue