diff --git a/gossipd/routing.c b/gossipd/routing.c index f67d82f0a..388425128 100644 --- a/gossipd/routing.c +++ b/gossipd/routing.c @@ -154,6 +154,16 @@ struct chan *next_chan(const struct node *node, struct chan_map_iter *i) return chan_map_next(&node->chans.map, i); } +static void destroy_routing_state(struct routing_state *rstate) +{ + /* Since we omitted destructors on these, clean up manually */ + u64 idx; + for (struct chan *chan = uintmap_first(&rstate->chanmap, &idx); + chan; + chan = uintmap_after(&rstate->chanmap, &idx)) + free_chan(rstate, chan); +} + struct routing_state *new_routing_state(const tal_t *ctx, const struct chainparams *chainparams, const struct node_id *local_id, @@ -188,6 +198,7 @@ struct routing_state *new_routing_state(const tal_t *ctx, } else rstate->gossip_time = NULL; #endif + tal_add_destructor(rstate, destroy_routing_state); return rstate; } diff --git a/gossipd/test/run-bench-find_route.c b/gossipd/test/run-bench-find_route.c index fc61a3c62..699a2e5ba 100644 --- a/gossipd/test/run-bench-find_route.c +++ b/gossipd/test/run-bench-find_route.c @@ -278,13 +278,6 @@ int main(int argc, char *argv[]) if (route_lengths[i]) printf(" Length %zu: %zu\n", i, route_lengths[i]); - /* Since we omitted destructors on these, clean up manually */ - u64 idx; - for (struct chan *chan = uintmap_first(&rstate->chanmap, &idx); - chan; - chan = uintmap_after(&rstate->chanmap, &idx)) - free_chan(rstate, chan); - tal_free(tmpctx); secp256k1_context_destroy(secp256k1_ctx); opt_free_table(); diff --git a/gossipd/test/run-find_route-specific.c b/gossipd/test/run-find_route-specific.c index 3c2dc90b9..0a934894d 100644 --- a/gossipd/test/run-find_route-specific.c +++ b/gossipd/test/run-find_route-specific.c @@ -261,13 +261,6 @@ int main(void) ROUTING_MAX_HOPS, &fee); assert(!route); - /* Since we omitted destructors on these, clean up manually */ - u64 idx; - for (struct chan *chan = uintmap_first(&rstate->chanmap, &idx); - chan; - chan = uintmap_after(&rstate->chanmap, &idx)) - free_chan(rstate, chan); - tal_free(tmpctx); secp256k1_context_destroy(secp256k1_ctx); return 0; diff --git a/gossipd/test/run-find_route.c b/gossipd/test/run-find_route.c index 4640bf4fa..9cca0f9c7 100644 --- a/gossipd/test/run-find_route.c +++ b/gossipd/test/run-find_route.c @@ -278,13 +278,6 @@ int main(void) assert(channel_is_between(route[1], &d, &c)); assert(amount_msat_eq(fee, AMOUNT_MSAT(0 + 6))); - /* Since we omitted destructors on these, clean up manually */ - u64 idx; - for (struct chan *chan = uintmap_first(&rstate->chanmap, &idx); - chan; - chan = uintmap_after(&rstate->chanmap, &idx)) - free_chan(rstate, chan); - tal_free(tmpctx); secp256k1_context_destroy(secp256k1_ctx); return 0; diff --git a/gossipd/test/run-overlong.c b/gossipd/test/run-overlong.c index fe0e5fadf..c59c19e9f 100644 --- a/gossipd/test/run-overlong.c +++ b/gossipd/test/run-overlong.c @@ -197,13 +197,6 @@ int main(void) last_fee = fee; } - /* Since we omitted destructors on these, clean up manually */ - u64 idx; - for (struct chan *chan = uintmap_first(&rstate->chanmap, &idx); - chan; - chan = uintmap_after(&rstate->chanmap, &idx)) - free_chan(rstate, chan); - tal_free(tmpctx); secp256k1_context_destroy(secp256k1_ctx); return 0;