This commit is contained in:
Igor Katson 2024-08-21 16:20:46 +01:00
parent ad5f62b9b9
commit 3067ad21d5
No known key found for this signature in database
GPG key ID: B4EC22B66D61A3F5
3 changed files with 19 additions and 18 deletions

View file

@ -214,12 +214,16 @@ impl TorrentStateLive {
paused: TorrentStatePaused,
fatal_errors_tx: tokio::sync::oneshot::Sender<anyhow::Error>,
cancellation_token: CancellationToken,
session_stats: Arc<AtomicSessionStats>,
) -> anyhow::Result<Arc<Self>> {
let (peer_queue_tx, peer_queue_rx) = unbounded_channel();
let down_speed_estimator = SpeedEstimator::new(5);
let up_speed_estimator = SpeedEstimator::new(5);
let session = paused
.info
.session
.upgrade()
.context("session is dead, cannot start torrent")?;
let session_stats = session.stats.atomic.clone();
let down_speed_estimator = SpeedEstimator::default();
let up_speed_estimator = SpeedEstimator::default();
let have_bytes = paused.chunk_tracker.get_hns().have_bytes;
let lengths = *paused.chunk_tracker.get_lengths();

View file

@ -218,6 +218,7 @@ impl ManagedTorrent {
.upgrade()
.context("session is dead, cannot start torrent")?;
let mut g = self.locked.write();
let cancellation_token = session.cancellation_token().child_token();
let spawn_fatal_errors_receiver =
|state: &Arc<Self>,
@ -297,7 +298,7 @@ impl ManagedTorrent {
drop(g);
let t = self.clone();
let span = self.shared().span.clone();
let token = session.cancellation_token().child_token().clone();
let token = cancellation_token.clone();
spawn_with_cancel(
error_span!(parent: span.clone(), "initialize_and_start"),
@ -326,12 +327,7 @@ impl ManagedTorrent {
}
let (tx, rx) = tokio::sync::oneshot::channel();
let live = TorrentStateLive::new(
paused,
tx,
session.cancellation_token().child_token(),
session.stats.atomic.clone(),
)?;
let live = TorrentStateLive::new(paused, tx, cancellation_token)?;
g.state = ManagedTorrentState::Live(live.clone());
drop(g);
@ -356,16 +352,11 @@ impl ManagedTorrent {
ManagedTorrentState::Paused(_) => {
let paused = g.state.take().assert_paused();
let (tx, rx) = tokio::sync::oneshot::channel();
let live = TorrentStateLive::new(
paused,
tx,
session.cancellation_token().child_token().clone(),
session.stats.atomic.clone(),
)?;
let live = TorrentStateLive::new(paused, tx, cancellation_token.clone())?;
g.state = ManagedTorrentState::Live(live.clone());
drop(g);
spawn_fatal_errors_receiver(self, rx, session.cancellation_token().child_token());
spawn_fatal_errors_receiver(self, rx, cancellation_token);
spawn_peer_adder(&live, peer_rx);
Ok(())
}

View file

@ -19,6 +19,12 @@ pub struct SpeedEstimator {
time_remaining_millis: AtomicU64,
}
impl Default for SpeedEstimator {
fn default() -> Self {
Self::new(5)
}
}
impl SpeedEstimator {
pub fn new(window_seconds: usize) -> Self {
assert!(window_seconds > 1);