diff --git a/gossipd/gossipd.c b/gossipd/gossipd.c index 97e18d046..b67f69f0d 100644 --- a/gossipd/gossipd.c +++ b/gossipd/gossipd.c @@ -812,8 +812,7 @@ static void gossip_init(struct daemon *daemon, const u8 *msg) } daemon->rstate = new_routing_state(daemon, - &daemon->id, - &daemon->timers, + daemon, take(dev_gossip_time), dev_fast_gossip, dev_fast_gossip_prune); diff --git a/gossipd/routing.c b/gossipd/routing.c index eb3b1f87b..a71c1ad3f 100644 --- a/gossipd/routing.c +++ b/gossipd/routing.c @@ -12,7 +12,6 @@ #include #include #include -#include #include #include @@ -250,7 +249,7 @@ static void txout_failure_age(struct routing_state *rstate) uintmap_init(&rstate->txout_failures); rstate->num_txout_failures = 0; - rstate->txout_failure_timer = new_reltimer(rstate->timers, + rstate->txout_failure_timer = new_reltimer(&rstate->daemon->timers, rstate, time_from_sec(3600), txout_failure_age, rstate); } @@ -280,16 +279,14 @@ static bool in_txout_failures(struct routing_state *rstate, } struct routing_state *new_routing_state(const tal_t *ctx, - const struct node_id *local_id, - struct timers *timers, + struct daemon *daemon, const u32 *dev_gossip_time TAKES, bool dev_fast_gossip, bool dev_fast_gossip_prune) { struct routing_state *rstate = tal(ctx, struct routing_state); + rstate->daemon = daemon; rstate->nodes = new_node_map(rstate); - rstate->timers = timers; - rstate->local_id = *local_id; rstate->gs = gossip_store_new(rstate); rstate->local_channel_announced = false; rstate->last_timestamp = 0; @@ -2101,14 +2098,14 @@ bool routing_add_private_channel(struct routing_state *rstate, /* Make sure this id (if any) was allowed to create this */ if (id) { struct node_id expected[2]; - int cmp = node_id_cmp(&rstate->local_id, id); + int cmp = node_id_cmp(&rstate->daemon->id, id); if (cmp < 0) { - expected[0] = rstate->local_id; + expected[0] = rstate->daemon->id; expected[1] = *id; } else if (cmp > 0) { expected[0] = *id; - expected[1] = rstate->local_id; + expected[1] = rstate->daemon->id; } else { /* lightningd sets id, so this is fatal */ status_failed(STATUS_FAIL_MASTER_IO, diff --git a/gossipd/routing.h b/gossipd/routing.h index 4eaca73ee..5e516a11c 100644 --- a/gossipd/routing.h +++ b/gossipd/routing.h @@ -12,6 +12,7 @@ #include #include #include +#include #include #include @@ -196,8 +197,7 @@ static inline int half_chan_idx(const struct node *n, const struct chan *chan) } struct routing_state { - /* TImers base from struct gossipd. */ - struct timers *timers; + struct daemon *daemon; /* All known nodes. */ struct node_map *nodes; @@ -211,9 +211,6 @@ struct routing_state { /* Gossip store */ struct gossip_store *gs; - /* Our own ID so we can identify local channels */ - struct node_id local_id; - /* A map of channels indexed by short_channel_ids */ UINTMAP(struct chan *) chanmap; @@ -254,7 +251,7 @@ static inline bool local_direction(struct routing_state *rstate, int *direction) { for (int dir = 0; dir <= 1; (dir)++) { - if (node_id_eq(&chan->nodes[dir]->id, &rstate->local_id)) { + if (node_id_eq(&chan->nodes[dir]->id, &rstate->daemon->id)) { if (direction) *direction = dir; return true; @@ -271,8 +268,7 @@ get_channel(const struct routing_state *rstate, } struct routing_state *new_routing_state(const tal_t *ctx, - const struct node_id *local_id, - struct timers *timers, + struct daemon *daemon, const u32 *dev_gossip_time TAKES, bool dev_fast_gossip, bool dev_fast_gossip_prune); diff --git a/gossipd/test/run-txout_failure.c b/gossipd/test/run-txout_failure.c index 9f5782ed8..fc93e6787 100644 --- a/gossipd/test/run-txout_failure.c +++ b/gossipd/test/run-txout_failure.c @@ -108,16 +108,15 @@ struct gossip_store *gossip_store_new(struct routing_state *rstate UNNEEDED) int main(int argc, char *argv[]) { struct routing_state *rstate; - struct timers timers; struct timer *t; struct short_channel_id scid1, scid2; + struct daemon *daemon; common_setup(argv[0]); - timers_init(&timers, time_mono()); - /* Random uninitalized node_id, we don't reference it. */ - rstate = new_routing_state(tmpctx, tal(tmpctx, struct node_id), - &timers, NULL, false, false); + daemon = tal(tmpctx, struct daemon); + timers_init(&daemon->timers, time_mono()); + rstate = new_routing_state(tmpctx, daemon, NULL, false, false); scid1.u64 = 100; scid2.u64 = 200; @@ -135,8 +134,9 @@ int main(int argc, char *argv[]) assert(rstate->num_txout_failures == 2); /* Move time forward 1 hour. */ - t = timers_expire(&timers, timemono_add(time_mono(), - time_from_sec(3601))); + t = timers_expire(&daemon->timers, + timemono_add(time_mono(), + time_from_sec(3601))); assert(t); timer_expired(t); @@ -145,8 +145,9 @@ int main(int argc, char *argv[]) assert(in_txout_failures(rstate, &scid1)); assert(rstate->num_txout_failures == 1); - t = timers_expire(&timers, timemono_add(time_mono(), - time_from_sec(3601))); + t = timers_expire(&daemon->timers, + timemono_add(time_mono(), + time_from_sec(3601))); assert(t); timer_expired(t); @@ -155,7 +156,9 @@ int main(int argc, char *argv[]) assert(rstate->num_txout_failures == 1); assert(!in_txout_failures(rstate, &scid2)); + tal_free(rstate); + timers_cleanup(&daemon->timers); common_shutdown(); - timers_cleanup(&timers); + return 0; }