Skip to content

Commit f33dcf3

Browse files
authored
Merge pull request FRRouting#18544 from donaldsharp/memory_leaks_all_over
Memory leaks all over
2 parents 1ef4f19 + 354aee8 commit f33dcf3

File tree

12 files changed

+40
-2
lines changed

12 files changed

+40
-2
lines changed

babeld/babel_main.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ Copyright 2011 by Matthieu Boutier and Juliusz Chroboczek
1919
#include "memory.h"
2020
#include "libfrr.h"
2121
#include "lib_errors.h"
22+
#include "plist.h"
2223

2324
#include "babel_main.h"
2425
#include "babeld.h"
@@ -313,6 +314,7 @@ babel_exit_properly(void)
313314
debugf(BABEL_DEBUG_COMMON, "Done.");
314315

315316
vrf_terminate();
317+
prefix_list_reset();
316318
frr_fini();
317319

318320
exit(0);

bgpd/bgp_fsm.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1260,7 +1260,7 @@ void bgp_fsm_change_status(struct peer_connection *connection,
12601260
/* Transition into Clearing or Deleted must /always/ clear all routes..
12611261
* (and must do so before actually changing into Deleted..
12621262
*/
1263-
if (status >= Clearing && (peer->established || peer == bgp->peer_self)) {
1263+
if (status >= Clearing && (peer->established || peer != bgp->peer_self)) {
12641264
bgp_clear_route_all(peer);
12651265

12661266
/* If no route was queued for the clear-node processing,

bgpd/bgp_route.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4323,9 +4323,14 @@ static void early_meta_queue_free(struct meta_queue *mq, struct bgp_dest_queue *
43234323
struct bgp_dest *dest;
43244324

43254325
while (!STAILQ_EMPTY(l)) {
4326+
struct bgp_table *table;
4327+
43264328
dest = STAILQ_FIRST(l);
43274329
STAILQ_REMOVE_HEAD(l, pq);
43284330
STAILQ_NEXT(dest, pq) = NULL; /* complete unlink */
4331+
4332+
table = bgp_dest_table(dest);
4333+
bgp_table_unlock(table);
43294334
mq->size--;
43304335
}
43314336
}
@@ -4336,9 +4341,14 @@ static void other_meta_queue_free(struct meta_queue *mq, struct bgp_dest_queue *
43364341
struct bgp_dest *dest;
43374342

43384343
while (!STAILQ_EMPTY(l)) {
4344+
struct bgp_table *table;
4345+
43394346
dest = STAILQ_FIRST(l);
43404347
STAILQ_REMOVE_HEAD(l, pq);
43414348
STAILQ_NEXT(dest, pq) = NULL; /* complete unlink */
4349+
4350+
table = bgp_dest_table(dest);
4351+
bgp_table_unlock(table);
43424352
mq->size--;
43434353
}
43444354
}

bgpd/bgp_routemap.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2615,6 +2615,9 @@ route_set_aspath_exclude(void *rule, const struct prefix *dummy, void *object)
26152615
path->attr->aspath =
26162616
aspath_filter_exclude_acl(new_path,
26172617
ase->exclude_aspath_acl);
2618+
else
2619+
aspath_free(new_path);
2620+
26182621
return RMAP_OKAY;
26192622
}
26202623

eigrpd/eigrp_main.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,8 @@ static void sigint(void)
9999
keychain_terminate();
100100

101101
route_map_finish();
102+
prefix_list_reset();
103+
102104
eigrp_terminate();
103105

104106
exit(0);

isisd/isis_affinitymap.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,4 +64,8 @@ void isis_affinity_map_init(void)
6464
affinity_map_set_update_hook(isis_affinity_map_update);
6565
}
6666

67+
void isis_affinity_map_terminate(void)
68+
{
69+
affinity_map_terminate();
70+
}
6771
#endif /* ifndef FABRICD */

isisd/isis_affinitymap.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ extern "C" {
1515
#endif
1616

1717
extern void isis_affinity_map_init(void);
18+
extern void isis_affinity_map_terminate(void);
1819

1920
#ifdef __cplusplus
2021
}

isisd/isis_main.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,10 @@ static __attribute__((__noreturn__)) void terminate(int i)
109109

110110
isis_master_terminate();
111111
route_map_finish();
112+
prefix_list_reset();
113+
#ifndef FABRICD
114+
isis_affinity_map_terminate();
115+
#endif
112116
vrf_terminate();
113117

114118
frr_fini();

lib/affinitymap.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,3 +127,12 @@ void affinity_map_set_update_hook(void (*func)(const char *affmap_name,
127127
{
128128
affinity_map_master.update_hook = func;
129129
}
130+
131+
void affinity_map_terminate(void)
132+
{
133+
struct affinity_map *map;
134+
struct listnode *node, *nnode;
135+
136+
for (ALL_LIST_ELEMENTS(affinity_map_master.maps, node, nnode, map))
137+
affinity_map_free(map);
138+
}

lib/affinitymap.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ void affinity_map_set_update_hook(void (*func)(const char *affmap_name,
7171
uint16_t new_pos));
7272

7373
void affinity_map_init(void);
74-
74+
void affinity_map_terminate(void);
7575

7676
#ifdef __cplusplus
7777
}

ripd/rip_main.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ static void sigint(void)
9494
rip_zclient_stop();
9595

9696
route_map_finish();
97+
prefix_list_reset();
9798

9899
keychain_terminate();
99100
frr_fini();

zebra/main.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -247,6 +247,8 @@ void zebra_finalize(struct event *dummy)
247247

248248
label_manager_terminate();
249249

250+
affinity_map_terminate();
251+
250252
ns_walk_func(zebra_ns_final_shutdown, NULL, NULL);
251253

252254
ns_terminate();

0 commit comments

Comments
 (0)