From: Maria Matejka Date: Mon, 19 Apr 2021 13:13:20 +0000 (+0200) Subject: Internal route tables have a reduced cleanup routine X-Git-Tag: v2.0.9~83 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=3d90241f62393e6d614c1d20fde4013c9ff24685;p=thirdparty%2Fbird.git Internal route tables have a reduced cleanup routine This fixes an internal table cleanup bug introduced in ff397df7edcbe7a8abca5b419729b9c64c063847. --- diff --git a/nest/route.h b/nest/route.h index 2393fdc31..f5fc9e312 100644 --- a/nest/route.h +++ b/nest/route.h @@ -164,6 +164,9 @@ typedef struct rtable { int pipe_busy; /* Pipe loop detection */ int use_count; /* Number of protocols using this table */ u32 rt_count; /* Number of routes in the table */ + + byte internal; /* Internal table of a protocol */ + struct hmap id_map; struct hostcache *hostcache; struct rtable_config *config; /* Configuration of this table */ diff --git a/nest/rt-table.c b/nest/rt-table.c index d2fc9c651..13209dd7c 100644 --- a/nest/rt-table.c +++ b/nest/rt-table.c @@ -1880,6 +1880,9 @@ rt_free(resource *_r) DBG("Deleting routing table %s\n", r->name); ASSERT_DIE(r->use_count == 0); + if (r->internal) + return; + r->config->table = NULL; rem_node(&r->n); @@ -1931,7 +1934,7 @@ rt_setup(pool *pp, struct rtable_config *cf) fib_init(&t->fib, p, t->addr_type, sizeof(net), OFFSETOF(net, n), 0, NULL); - if (!cf->internal) + if (!(t->internal = cf->internal)) { init_list(&t->channels); hmap_init(&t->id_map, p, 1024);