diff --git a/gossipd/routing.c b/gossipd/routing.c index e97029f04..55004bba7 100644 --- a/gossipd/routing.c +++ b/gossipd/routing.c @@ -211,6 +211,14 @@ static bool node_announce_predates_channels(const struct node *node) return true; } +static u64 persistent_broadcast(struct routing_state *rstate, const u8 *msg, u32 timestamp) +{ + u64 index = insert_broadcast(rstate->broadcasts, msg, timestamp); + if (index) + gossip_store_add(rstate->store, msg); + return index; +} + static void remove_chan_from_node(struct routing_state *rstate, struct node *node, const struct chan *chan) { @@ -238,10 +246,8 @@ static void remove_chan_from_node(struct routing_state *rstate, * retransmissions in this corner case */ broadcast_del(rstate->broadcasts, node->node_announcement_index, node->node_announcement); - node->node_announcement_index = - insert_broadcast(rstate->broadcasts, - node->node_announcement, - node->last_timestamp); + node->node_announcement_index = persistent_broadcast( + rstate, node->node_announcement, node->last_timestamp); } } @@ -681,9 +687,8 @@ static void add_channel_announce_to_broadcast(struct routing_state *rstate, struct chan *chan, u32 timestamp) { - chan->channel_announcement_index - = insert_broadcast(rstate->broadcasts, chan->channel_announce, - timestamp); + chan->channel_announcement_index = + persistent_broadcast(rstate, chan->channel_announce, timestamp); rstate->local_channel_announced |= is_local_channel(rstate, chan); /* If we've been waiting for this, now we can announce node */ @@ -692,10 +697,9 @@ static void add_channel_announce_to_broadcast(struct routing_state *rstate, if (!node->node_announcement) continue; if (!node->node_announcement_index) { - node->node_announcement_index = - insert_broadcast(rstate->broadcasts, - node->node_announcement, - node->last_timestamp); + node->node_announcement_index = persistent_broadcast( + rstate, node->node_announcement, + node->last_timestamp); } } } @@ -942,7 +946,6 @@ void handle_pending_cannouncement(struct routing_state *rstate, if (!routing_add_channel_announcement(rstate, pending->announce, satoshis)) status_failed(STATUS_FAIL_INTERNAL_ERROR, "Could not add channel_announcement"); - gossip_store_add(rstate->store, pending->announce); /* Did we have an update waiting? If so, apply now. */ process_pending_channel_update(rstate, scid, pending->updates[0]); @@ -1062,9 +1065,8 @@ bool routing_add_channel_update(struct routing_state *rstate, if (!have_broadcast_announce) add_channel_announce_to_broadcast(rstate, chan, timestamp); - insert_broadcast(rstate->broadcasts, - chan->half[direction].channel_update, - timestamp); + persistent_broadcast(rstate, chan->half[direction].channel_update, + timestamp); return true; } @@ -1204,11 +1206,6 @@ u8 *handle_channel_update(struct routing_state *rstate, const u8 *update, status_failed(STATUS_FAIL_INTERNAL_ERROR, "Failed adding channel_update"); - /* Store the channel_update for both public and non-public channels - * (non-public ones may just be the incoming direction). We'd have - * dropped invalid ones earlier. */ - gossip_store_add(rstate->store, serialized); - return NULL; } @@ -1284,10 +1281,8 @@ bool routing_add_node_announcement(struct routing_state *rstate, const u8 *msg T /* We might be waiting for channel_announce to be released. */ if (node_has_broadcastable_channels(node)) { - node->node_announcement_index = - insert_broadcast(rstate->broadcasts, - node->node_announcement, - timestamp); + node->node_announcement_index = persistent_broadcast( + rstate, node->node_announcement, timestamp); } return true; } @@ -1420,7 +1415,6 @@ u8 *handle_node_announcement(struct routing_state *rstate, const u8 *node_ann) applied = routing_add_node_announcement(rstate, serialized); assert(applied); - gossip_store_add(rstate->store, serialized); return NULL; }