diff -U2 -r /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/libi2pd_client/Torrents.cpp /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/libi2pd_client/Torrents.cpp --- /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/libi2pd_client/Torrents.cpp 2026-08-12 15:08:33.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/libi2pd_client/Torrents.cpp 2026-08-12 14:39:58.000000000 +0000 @@ -1140,22 +1140,19 @@ [requestBlock = std::move(requestBlock), torrent = m_Torrent, s = shared_from_this ()]() mutable { - bool loaded = true; + auto fragments = torrent->GetPieceFileFragments (requestBlock.index); Piece& piece = torrent->GetPiece (requestBlock.index); - if (!piece.GetData ()) // don't try to load if already loaded + piece.SetIsSending (true); + bool loaded = true; + for (auto& it: fragments) { - auto fragments = torrent->GetPieceFileFragments (requestBlock.index); - piece.SetIsSending (true); - for (auto& it: fragments) - { - if (!piece.Load (std::move (it))) - loaded = false; - } - if (loaded && !piece.VerifyHash ()) - { - LogPrint (eLogError, "Torrent: Corrupted piece ", requestBlock.index); + if (!piece.Load (std::move (it))) loaded = false; - } - piece.SetIsSending (false); } + if (!piece.VerifyHash ()) + { + LogPrint (eLogError, "Torrent: Corrupted piece ", requestBlock.index); + loaded = false; + } + piece.SetIsSending (false); if (loaded) boost::asio::post (s->GetTorrentsTunnel ()->GetService (), @@ -1168,8 +1165,5 @@ }); else - { LogPrint (eLogError, "Torrent: Failed to load piece ", requestBlock.index); - piece.Reset (); - } }); }