Skip to content

Commit 9cba417

Browse files
endothermicdevrustyrussell
authored andcommitted
gossipd: seeker: allocate gossiper array at init
This will let us change the default gossipers at runtime
1 parent 9295b4f commit 9cba417

File tree

1 file changed

+11
-11
lines changed

1 file changed

+11
-11
lines changed

gossipd/seeker.c

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ struct seeker {
8383
bool unknown_nodes;
8484

8585
/* Peers we've asked to stream us gossip (set to NULL if peer dies) */
86-
struct peer *gossiper[10];
86+
struct peer **gossiper;
8787

8888
/* A peer that told us about unknown gossip (set to NULL if peer dies). */
8989
struct peer *preferred_peer;
@@ -150,8 +150,7 @@ struct seeker *new_seeker(struct daemon *daemon)
150150
uintmap_init(&seeker->unknown_scids);
151151
uintmap_init(&seeker->stale_scids);
152152
seeker->random_peer = NULL;
153-
for (size_t i = 0; i < ARRAY_SIZE(seeker->gossiper); i++)
154-
seeker->gossiper[i] = NULL;
153+
seeker->gossiper = tal_arrz(seeker, struct peer *, 10);
155154
seeker->preferred_peer = NULL;
156155
seeker->unknown_nodes = false;
157156
seeker->last_full_sync_peer = NULL;
@@ -269,7 +268,7 @@ static void normal_gossip_start(struct seeker *seeker, struct peer *peer, bool a
269268
return;
270269

271270
/* Make this one of our streaming gossipers if we aren't full */
272-
for (size_t i = 0; i < ARRAY_SIZE(seeker->gossiper); i++) {
271+
for (size_t i = 0; i < tal_count(seeker->gossiper); i++) {
273272
if (seeker->gossiper[i] == NULL) {
274273
seeker->gossiper[i] = peer;
275274
enable_stream = true;
@@ -887,7 +886,7 @@ static bool peer_is_not_gossipper(const struct peer *peer)
887886
if (!peer->gossip_queries_feature)
888887
return false;
889888

890-
for (size_t i = 0; i < ARRAY_SIZE(seeker->gossiper); i++) {
889+
for (size_t i = 0; i < tal_count(seeker->gossiper); i++) {
891890
if (seeker->gossiper[i] == peer)
892891
return false;
893892
}
@@ -898,7 +897,7 @@ static bool peer_is_not_gossipper(const struct peer *peer)
898897
static void reset_gossip_performance_metrics(struct seeker *seeker)
899898
{
900899
seeker->new_gossiper_elapsed = 0;
901-
for (int i = 0; i < ARRAY_SIZE(seeker->gossiper); i++) {
900+
for (int i = 0; i < tal_count(seeker->gossiper); i++) {
902901
seeker->gossiper[i]->gossip_counter = 0;
903902
}
904903
}
@@ -916,7 +915,7 @@ static void maybe_rotate_gossipers(struct seeker *seeker)
916915
return;
917916

918917
/* If we have a slot free, fill it. */
919-
for (i = 0; i < ARRAY_SIZE(seeker->gossiper); i++) {
918+
for (i = 0; i < tal_count(seeker->gossiper); i++) {
920919
if (!seeker->gossiper[i]) {
921920
status_peer_debug(&peer->id, "seeker: filling slot %zu",
922921
i);
@@ -932,9 +931,10 @@ static void maybe_rotate_gossipers(struct seeker *seeker)
932931
if (seeker->new_gossiper_elapsed < 5)
933932
return;
934933
u32 lowest_count = UINT_MAX;
935-
for (int j = 0; j < ARRAY_SIZE(seeker->gossiper); j++) {
936-
if (seeker-> gossiper[j]->gossip_counter < lowest_count) {
937-
lowest_count = seeker-> gossiper[j]->gossip_counter;
934+
lowest_idx = 0;
935+
for (int j = 0; j < tal_count(seeker->gossiper); j++) {
936+
if (seeker->gossiper[j]->gossip_counter < lowest_count) {
937+
lowest_count = seeker->gossiper[j]->gossip_counter;
938938
lowest_idx = j;
939939
}
940940
}
@@ -1112,7 +1112,7 @@ void seeker_peer_gone(struct seeker *seeker, const struct peer *peer)
11121112
if (seeker->random_peer == peer)
11131113
seeker->random_peer = NULL;
11141114

1115-
for (size_t i = 0; i < ARRAY_SIZE(seeker->gossiper); i++) {
1115+
for (size_t i = 0; i < tal_count(seeker->gossiper); i++) {
11161116
if (seeker->gossiper[i] == peer)
11171117
seeker->gossiper[i] = NULL;
11181118
}

0 commit comments

Comments
 (0)