From c06ce7090ff33a22e3e70a395abb169a98954093 Mon Sep 17 00:00:00 2001 From: Maria Matejka Date: Tue, 5 Mar 2024 12:17:56 +0100 Subject: [PATCH] Static: Unlock IGP tables on cleanup to avoid problems with hostentry unlocking --- nest/rt-table.c | 4 ---- proto/static/static.c | 11 +++++++++-- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/nest/rt-table.c b/nest/rt-table.c index 6a682069..d860cd00 100644 --- a/nest/rt-table.c +++ b/nest/rt-table.c @@ -4797,10 +4797,7 @@ hostentry_tmp_unlock(resource *r) { struct hostentry_tmp_lock *l = SKIP_BACK(struct hostentry_tmp_lock, r, r); RT_LOCKED(l->tab, tab) - { l->he->uc--; - rt_unlock_table(tab); - } } static void @@ -4845,7 +4842,6 @@ rt_get_hostentry(struct rtable_private *tab, ip_addr a, ip_addr ll, rtable *dep) l->he = he; l->tab = RT_PUB(tab); l->he->uc++; - rt_lock_table(tab); return he; } diff --git a/proto/static/static.c b/proto/static/static.c index bba868a6..aa3f7bac 100644 --- a/proto/static/static.c +++ b/proto/static/static.c @@ -564,13 +564,19 @@ static_shutdown(struct proto *P) WALK_LIST(r, cf->routes) static_reset_rte(p, r); + return PS_DOWN; +} + +static void +static_cleanup(struct proto *P) +{ + struct static_proto *p = (void *) P; + if (p->igp_table_ip4) rt_unlock_table(p->igp_table_ip4); if (p->igp_table_ip6) rt_unlock_table(p->igp_table_ip6); - - return PS_DOWN; } static void @@ -835,6 +841,7 @@ struct protocol proto_static = { .dump = static_dump, .start = static_start, .shutdown = static_shutdown, + .cleanup = static_cleanup, .reconfigure = static_reconfigure, .copy_config = static_copy_config, };