diff options
| author | Donald Sharp <sharpd@nvidia.com> | 2023-03-31 09:08:23 -0400 |
|---|---|---|
| committer | Donatas Abraitis <donatas@opensourcerouting.org> | 2023-04-05 16:24:47 +0300 |
| commit | d5510fb6c519b9a49a83b10bb9e5c6fec0ab2b37 (patch) | |
| tree | aadd3febb6eb81b9499a46c3487dde9d02e0da83 | |
| parent | c497beba694937a9e6099bc6ee27bd8d3d818101 (diff) | |
zebra: Cleanup ctx leak on shutdown and turn off event
two things:
On shutdown cleanup any events associated with the update walker.
Also do not allow new events to be created.
Fixes this mem-leak:
./msdp_topo1.test_msdp_topo1/r2.zebra.asan.1117790:Direct leak of 8 byte(s) in 1 object(s) allocated from:
./msdp_topo1.test_msdp_topo1/r2.zebra.asan.1117790- #0 0x7f0dd0b08037 in __interceptor_calloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:154
./msdp_topo1.test_msdp_topo1/r2.zebra.asan.1117790- #1 0x7f0dd06c19f9 in qcalloc lib/memory.c:105
./msdp_topo1.test_msdp_topo1/r2.zebra.asan.1117790- #2 0x55b42fb605bc in rib_update_ctx_init zebra/zebra_rib.c:4383
./msdp_topo1.test_msdp_topo1/r2.zebra.asan.1117790- #3 0x55b42fb6088f in rib_update zebra/zebra_rib.c:4421
./msdp_topo1.test_msdp_topo1/r2.zebra.asan.1117790- #4 0x55b42fa00344 in netlink_link_change zebra/if_netlink.c:2221
./msdp_topo1.test_msdp_topo1/r2.zebra.asan.1117790- #5 0x55b42fa24622 in netlink_information_fetch zebra/kernel_netlink.c:399
./msdp_topo1.test_msdp_topo1/r2.zebra.asan.1117790- #6 0x55b42fa28c02 in netlink_parse_info zebra/kernel_netlink.c:1183
./msdp_topo1.test_msdp_topo1/r2.zebra.asan.1117790- #7 0x55b42fa24951 in kernel_read zebra/kernel_netlink.c:493
./msdp_topo1.test_msdp_topo1/r2.zebra.asan.1117790- #8 0x7f0dd0797f0c in event_call lib/event.c:1995
./msdp_topo1.test_msdp_topo1/r2.zebra.asan.1117790- #9 0x7f0dd0684fd9 in frr_run lib/libfrr.c:1185
./msdp_topo1.test_msdp_topo1/r2.zebra.asan.1117790- #10 0x55b42fa30caa in main zebra/main.c:465
./msdp_topo1.test_msdp_topo1/r2.zebra.asan.1117790- #11 0x7f0dd01b5d09 in __libc_start_main ../csu/libc-start.c:308
./msdp_topo1.test_msdp_topo1/r2.zebra.asan.1117790-
./msdp_topo1.test_msdp_topo1/r2.zebra.asan.1117790-SUMMARY: AddressSanitizer: 8 byte(s) leaked in 1 allocation(s).
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
(cherry picked from commit 3cd0accb5051e900ab343d5fa7c59360c0c1a812)
Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
| -rw-r--r-- | zebra/main.c | 2 | ||||
| -rw-r--r-- | zebra/rib.h | 1 | ||||
| -rw-r--r-- | zebra/zebra_rib.c | 19 |
3 files changed, 22 insertions, 0 deletions
diff --git a/zebra/main.c b/zebra/main.c index 3de97943fd..3a8aa4cdaf 100644 --- a/zebra/main.c +++ b/zebra/main.c @@ -204,6 +204,8 @@ static void sigint(void) */ zebra_routemap_finish(); + rib_update_finish(); + list_delete(&zrouter.client_list); /* Indicate that all new dplane work has been enqueued. When that diff --git a/zebra/rib.h b/zebra/rib.h index 99f52bcd4e..c9bd2b8c95 100644 --- a/zebra/rib.h +++ b/zebra/rib.h @@ -331,6 +331,7 @@ enum rib_update_event { RIB_UPDATE_OTHER, RIB_UPDATE_MAX }; +void rib_update_finish(void); int route_entry_update_nhe(struct route_entry *re, struct nhg_hash_entry *new_nhghe); diff --git a/zebra/zebra_rib.c b/zebra/zebra_rib.c index adc6a904f1..08391f1a3d 100644 --- a/zebra/zebra_rib.c +++ b/zebra/zebra_rib.c @@ -4365,6 +4365,22 @@ static void rib_update_handler(struct thread *thread) */ static struct thread *t_rib_update_threads[RIB_UPDATE_MAX]; +void rib_update_finish(void) +{ + int i; + + for (i = RIB_UPDATE_KERNEL; i < RIB_UPDATE_MAX; i++) { + if (thread_is_scheduled(t_rib_update_threads[i])) { + struct rib_update_ctx *ctx; + + ctx = THREAD_ARG(t_rib_update_threads[i]); + + rib_update_ctx_fini(&ctx); + THREAD_OFF(t_rib_update_threads[i]); + } + } +} + /* Schedule a RIB update event for all vrfs */ void rib_update(enum rib_update_event event) { @@ -4373,6 +4389,9 @@ void rib_update(enum rib_update_event event) if (thread_is_scheduled(t_rib_update_threads[event])) return; + if (zebra_router_in_shutdown()) + return; + ctx = rib_update_ctx_init(0, event); ctx->vrf_all = true; |
