From a1c9fda32fb3df5735e19af365016acb35f008b3 Mon Sep 17 00:00:00 2001 From: Igor Katson Date: Sat, 16 Oct 2021 00:13:58 +0100 Subject: [PATCH] Speed computation now better fits torrent with large pieces --- crates/librqbit/src/torrent_manager.rs | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/crates/librqbit/src/torrent_manager.rs b/crates/librqbit/src/torrent_manager.rs index c825459..20f42e0 100644 --- a/crates/librqbit/src/torrent_manager.rs +++ b/crates/librqbit/src/torrent_manager.rs @@ -245,10 +245,14 @@ impl TorrentManager { let state = mgr.state.clone(); async move { loop { - let downloaded = state.stats_snapshot().downloaded_and_checked_bytes; + let stats = state.stats_snapshot(); + let fetched = state.stats_snapshot().fetched_bytes; let needed = state.initially_needed(); - let remaining = needed - downloaded; - estimator.add_snapshot(downloaded, remaining, Instant::now()); + // fetched can be too high in theory, so for safety make sure that it doesn't wrap around u64. + let remaining = needed + .wrapping_sub(fetched) + .min(needed - stats.downloaded_and_checked_bytes); + estimator.add_snapshot(fetched, remaining, Instant::now()); tokio::time::sleep(Duration::from_secs(1)).await; } }