| 877 | } |
| 878 | |
| 879 | static void check_firstpeer(struct seeker *seeker) |
| 880 | { |
| 881 | struct peer *peer = seeker->random_peer; |
| 882 | struct peer_node_id_map_iter it; |
| 883 | |
| 884 | /* It might have died, pick another. */ |
| 885 | if (!peer) { |
| 886 | peer = random_seeker(seeker, peer_has_gossip_queries); |
| 887 | /* No peer? Wait for a new one to join. */ |
| 888 | if (!peer) { |
| 889 | status_debug("seeker: no peers, waiting"); |
| 890 | if (seeker->new_gossiper_elapsed) |
| 891 | maybe_get_new_peer(seeker); |
| 892 | else |
| 893 | seeker->new_gossiper_elapsed++; |
| 894 | return; |
| 895 | } |
| 896 | |
| 897 | peer_gossip_startup(seeker, peer, false); |
| 898 | return; |
| 899 | } |
| 900 | |
| 901 | /* If no progress, we assume it's finished, and if it hasn't, |
| 902 | * we'll end up querying backwards in next steps. */ |
| 903 | if (peer_made_progress(seeker, peer)) |
| 904 | return; |
| 905 | |
| 906 | /* Other peers can gossip now. */ |
| 907 | status_peer_debug(&peer->id, "seeker: startup peer finished"); |
| 908 | seeker->random_peer = NULL; |
| 909 | |
| 910 | for (struct peer *p = peer_node_id_map_first(seeker->daemon->peers, &it); |
| 911 | p; |
| 912 | p = peer_node_id_map_next(seeker->daemon->peers, &it)) { |
| 913 | if (p == peer) |
| 914 | continue; |
| 915 | |
| 916 | normal_gossip_start(seeker, p, false); |
| 917 | } |
| 918 | |
| 919 | /* Ask a random peer for all channels, in case we're missing */ |
| 920 | seeker->scid_probe_start = chainparams->when_lightning_became_cool; |
| 921 | seeker->scid_probe_end = seeker->daemon->current_blockheight; |
| 922 | if (seeker->scid_probe_start > seeker->scid_probe_end) |
| 923 | seeker->scid_probe_start = 0; |
| 924 | peer_gossip_probe_scids(seeker); |
| 925 | } |
| 926 | |
| 927 | static void check_probe(struct seeker *seeker, |
| 928 | void (*restart)(struct seeker *seeker)) |
no test coverage detected