From bc4dc2b272b2a882eadf161d3bfb4b71842653a0 Mon Sep 17 00:00:00 2001 From: orignal Date: Mon, 14 Sep 2026 17:28:00 -0400 Subject: [PATCH] send reject request if loaded block cann't be sent --- libi2pd_client/Torrents.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/libi2pd_client/Torrents.cpp b/libi2pd_client/Torrents.cpp index 642a8e25..2c3a1e8f 100644 --- a/libi2pd_client/Torrents.cpp +++ b/libi2pd_client/Torrents.cpp @@ -1828,10 +1828,10 @@ namespace torrents bool loaded = true; auto [index, offset, len] = requestBlock; Piece& piece = torrent->GetPiece (index); + piece.SetIsSending (true); if (!piece.GetData ()) // don't try to load if already loaded { auto fragments = torrent->GetPieceFileFragments (index); - piece.SetIsSending (true); for (auto& it: fragments) { if (!piece.Load (std::move (it))) @@ -1839,20 +1839,24 @@ namespace torrents } if (loaded && !piece.VerifyHash ()) { - LogPrint (eLogError, "Torrent: Corrupted piece ", index); + LogPrint (eLogError, "Torrents: Corrupted piece ", index); loaded = false; } - piece.SetIsSending (false); } + piece.SetIsSending (false); if (loaded) boost::asio::post (s->GetTorrentsTunnel ()->GetService (), [requestedBlock = std::move (requestBlock), s]() { - s->SendRequestedBlock (requestedBlock); + if (!s->SendRequestedBlock (requestedBlock)) + { + LogPrint (eLogError, "Torrents: Couldn't send block from loaded piece"); + std::apply (std::bind_front(&PeerConnection::SendRejectRequestMsg, s), requestedBlock); + } }); else { - LogPrint (eLogError, "Torrent: Failed to load piece ", index); + LogPrint (eLogError, "Torrents: Failed to load piece ", index); piece.Reset (); if (s->m_IsFast) boost::asio::post (s->GetTorrentsTunnel ()->GetService (),