mirror of
https://github.com/aljazceru/lightning.git
synced 2025-12-24 01:24:26 +01:00
common/memleak: add dynamic hooks for assisting memleak.
Rather than reaching into data structures, let them register their own callbacks. This avoids us having to expose "memleak_remove_xxx" functions, and call them manually. Under the hood, this is done by having a specially-named tal child of the thing we want to assist, containing the callback. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
committed by
Christian Decker
parent
17541e22a3
commit
aca2e4f722
@@ -165,6 +165,26 @@ static void destroy_routing_state(struct routing_state *rstate)
|
||||
free_chan(rstate, chan);
|
||||
}
|
||||
|
||||
#if DEVELOPER
|
||||
static void memleak_help_routing_tables(struct htable *memtable,
|
||||
struct routing_state *rstate)
|
||||
{
|
||||
struct node *n;
|
||||
struct node_map_iter nit;
|
||||
|
||||
memleak_remove_htable(memtable, &rstate->nodes->raw);
|
||||
memleak_remove_htable(memtable, &rstate->pending_node_map->raw);
|
||||
memleak_remove_htable(memtable, &rstate->pending_cannouncements.raw);
|
||||
|
||||
for (n = node_map_first(rstate->nodes, &nit);
|
||||
n;
|
||||
n = node_map_next(rstate->nodes, &nit)) {
|
||||
if (node_uses_chan_map(n))
|
||||
memleak_remove_htable(memtable, &n->chans.map.raw);
|
||||
}
|
||||
}
|
||||
#endif /* DEVELOPER */
|
||||
|
||||
struct routing_state *new_routing_state(const tal_t *ctx,
|
||||
const struct chainparams *chainparams,
|
||||
const struct node_id *local_id,
|
||||
@@ -199,6 +219,7 @@ struct routing_state *new_routing_state(const tal_t *ctx,
|
||||
rstate->gossip_time = NULL;
|
||||
#endif
|
||||
tal_add_destructor(rstate, destroy_routing_state);
|
||||
memleak_add_helper(rstate, memleak_help_routing_tables);
|
||||
|
||||
return rstate;
|
||||
}
|
||||
@@ -2529,26 +2550,6 @@ void route_prune(struct routing_state *rstate)
|
||||
}
|
||||
}
|
||||
|
||||
#if DEVELOPER
|
||||
void memleak_remove_routing_tables(struct htable *memtable,
|
||||
const struct routing_state *rstate)
|
||||
{
|
||||
struct node *n;
|
||||
struct node_map_iter nit;
|
||||
|
||||
memleak_remove_htable(memtable, &rstate->nodes->raw);
|
||||
memleak_remove_htable(memtable, &rstate->pending_node_map->raw);
|
||||
memleak_remove_htable(memtable, &rstate->pending_cannouncements.raw);
|
||||
|
||||
for (n = node_map_first(rstate->nodes, &nit);
|
||||
n;
|
||||
n = node_map_next(rstate->nodes, &nit)) {
|
||||
if (node_uses_chan_map(n))
|
||||
memleak_remove_htable(memtable, &n->chans.map.raw);
|
||||
}
|
||||
}
|
||||
#endif /* DEVELOPER */
|
||||
|
||||
bool handle_local_add_channel(struct routing_state *rstate,
|
||||
const u8 *msg, u64 index)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user