mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-05 04:40:21 +00:00
zebra: Free Zebra client resources
Memory leaks started flowing:
```
AddressSanitizer Topotests Part 0: 15 KB -> 283 KB
AddressSanitizer Topotests Part 1: 1 KB -> 495 KB
AddressSanitizer Topotests Part 2: 13 KB -> 478 KB
AddressSanitizer Topotests Part 3: 39 KB -> 213 KB
AddressSanitizer Topotests Part 4: 30 KB -> 836 KB
AddressSanitizer Topotests Part 5: 0 bytes -> 356 KB
AddressSanitizer Topotests Part 6: 86 KB -> 783 KB
AddressSanitizer Topotests Part 7: 0 bytes -> 354 KB
AddressSanitizer Topotests Part 8: 0 bytes -> 62 KB
AddressSanitizer Topotests Part 9: 408 KB -> 518 KB
```
```
Direct leak of 3584 byte(s) in 1 object(s) allocated from:
#0 0x7f1957b02d28 in __interceptor_calloc (/usr/lib/x86_64-linux-gnu/libasan.so.4+0xded28)
#1 0x559895c55df0 in qcalloc lib/memory.c:105
#2 0x559895bc1cdf in zserv_client_create zebra/zserv.c:743
#3 0x559895bc1cdf in zserv_accept zebra/zserv.c:880
#4 0x559895cf3438 in event_call lib/event.c:1995
#5 0x559895c3901c in frr_run lib/libfrr.c:1213
#6 0x559895a698f1 in main zebra/main.c:472
#7 0x7f195635ec86 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x21c86)
```
Fixes b20acd0
("bgpd: Use synchronous way to get labels from Zebra")
Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
This commit is contained in:
parent
4262dc3bd8
commit
97072d144e
@ -582,30 +582,27 @@ static void zserv_client_free(struct zserv *client)
|
||||
|
||||
/* Close file descriptor. */
|
||||
if (client->sock) {
|
||||
unsigned long nroutes;
|
||||
unsigned long nnhgs;
|
||||
unsigned long nroutes = 0;
|
||||
unsigned long nnhgs = 0;
|
||||
|
||||
close(client->sock);
|
||||
|
||||
/* If this is a synchronous BGP Zebra client for label/table
|
||||
* manager, then ignore it. It's not GR-aware, and causes GR to
|
||||
* be skipped for the session_id == 0 (asynchronous).
|
||||
*/
|
||||
if (client->proto == ZEBRA_ROUTE_BGP && client->session_id == 1)
|
||||
return;
|
||||
|
||||
if (DYNAMIC_CLIENT_GR_DISABLED(client)) {
|
||||
zebra_mpls_client_cleanup_vrf_label(client->proto);
|
||||
if (!client->synchronous) {
|
||||
zebra_mpls_client_cleanup_vrf_label(
|
||||
client->proto);
|
||||
|
||||
nroutes = rib_score_proto(client->proto,
|
||||
client->instance);
|
||||
nroutes = rib_score_proto(client->proto,
|
||||
client->instance);
|
||||
}
|
||||
zlog_notice(
|
||||
"client %d disconnected %lu %s routes removed from the rib",
|
||||
client->sock, nroutes,
|
||||
zebra_route_string(client->proto));
|
||||
|
||||
/* Not worrying about instance for now */
|
||||
nnhgs = zebra_nhg_score_proto(client->proto);
|
||||
if (!client->synchronous)
|
||||
nnhgs = zebra_nhg_score_proto(client->proto);
|
||||
zlog_notice(
|
||||
"client %d disconnected %lu %s nhgs removed from the rib",
|
||||
client->sock, nnhgs,
|
||||
|
Loading…
Reference in New Issue
Block a user