From 41cf6b6ef4e89a72a8390b5689f03796c3400bad Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Mon, 23 Dec 2013 22:35:17 +0100 Subject: After a peer was ignored because of a peer limit, always re-resolve the first remote --- src/fastd.c | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/src/fastd.c b/src/fastd.c index 634c736..8d82bdb 100644 --- a/src/fastd.c +++ b/src/fastd.c @@ -447,20 +447,26 @@ static void handle_handshake_queue(fastd_context_t *ctx) { fastd_peer_schedule_handshake_default(ctx, peer); if (!fastd_peer_may_connect(ctx, peer)) { - peer->next_remote = peer->remotes; - peer->next_remote->current_address = 0; + if (peer->next_remote != NULL) { + pr_debug(ctx, "disabling handshakes with %P because of the peer limit", peer); + peer->next_remote = NULL; + } + return; } - send_handshake(ctx, peer); + if (peer->next_remote) { + send_handshake(ctx, peer); - if (fastd_peer_is_established(peer)) - return; + if (fastd_peer_is_established(peer)) + return; - if (++peer->next_remote->current_address < peer->next_remote->n_addresses) - return; + if (++peer->next_remote->current_address < peer->next_remote->n_addresses) + return; + + peer->next_remote = peer->next_remote->next; + } - peer->next_remote = peer->next_remote->next; if (!peer->next_remote) peer->next_remote = peer->remotes; -- cgit v1.2.3