From 1d04ea65d3e03c9319fdcf547003f501ab118a64 Mon Sep 17 00:00:00 2001 From: Mike Gelfand Date: Tue, 4 Jul 2017 21:22:26 +0300 Subject: [PATCH] Don't switch trackers while announcing Fixes: #297 --- libtransmission/announcer-udp.c | 16 ++++++++++++---- libtransmission/announcer.c | 2 ++ 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/libtransmission/announcer-udp.c b/libtransmission/announcer-udp.c index 3b7c41341..3e573c65a 100644 --- a/libtransmission/announcer-udp.c +++ b/libtransmission/announcer-udp.c @@ -659,7 +659,8 @@ tau_tracker_is_idle (const struct tau_tracker * tracker) } static void -tau_tracker_upkeep (struct tau_tracker * tracker) +tau_tracker_upkeep_ex (struct tau_tracker * tracker, + bool timeout_reqs) { const time_t now = tr_time (); const bool closing = tracker->close_at != 0; @@ -717,12 +718,19 @@ tau_tracker_upkeep (struct tau_tracker * tracker) return; } - tau_tracker_timeout_reqs (tracker); + if (timeout_reqs) + tau_tracker_timeout_reqs (tracker); if ((tracker->addr != NULL) && (tracker->connection_expiration_time > now)) tau_tracker_send_reqs (tracker); } +static void +tau_tracker_upkeep (struct tau_tracker * tracker) +{ + tau_tracker_upkeep_ex (tracker, true); +} + /**** ***** ***** SESSION @@ -957,7 +965,7 @@ tr_tracker_udp_announce (tr_session * session, response_func, user_data); tr_ptrArrayAppend (&tracker->announces, r); - tau_tracker_upkeep (tracker); + tau_tracker_upkeep_ex (tracker, false); } void @@ -972,5 +980,5 @@ tr_tracker_udp_scrape (tr_session * session, response_func, user_data); tr_ptrArrayAppend (&tracker->scrapes, r); - tau_tracker_upkeep (tracker); + tau_tracker_upkeep_ex (tracker, false); } diff --git a/libtransmission/announcer.c b/libtransmission/announcer.c index eeffbb81e..35e1f49ba 100644 --- a/libtransmission/announcer.c +++ b/libtransmission/announcer.c @@ -1425,6 +1425,8 @@ multiscrape (tr_announcer * announcer, tr_ptrArray * tiers) char * url = tier->currentTracker->scrape; const uint8_t * hash = tier->tor->info.hash; + assert (url != NULL); + /* if there's a request with this scrape URL and a free slot, use it */ for (j=0; j