diff -U2 -r /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/libi2pd/Destination.cpp /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/libi2pd/Destination.cpp --- /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/libi2pd/Destination.cpp 2026-10-30 18:52:19.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/libi2pd/Destination.cpp 2026-10-30 18:17:42.000000000 +0000 @@ -180,7 +180,6 @@ bool LeaseSetDestination::Reconfigure(const i2p::util::Mapping& params) { - bool dontPublishLeaseSet = true; - if (params.Get (I2CP_PARAM_DONT_PUBLISH_LEASESET, dontPublishLeaseSet)) - m_IsPublic = !dontPublishLeaseSet; + params.Get (I2CP_PARAM_DONT_PUBLISH_LEASESET, m_IsPublic); + auto numTags = GetNumTags (); params.Get (I2CP_PARAM_TAGS_TO_SEND, numTags); 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-10-30 18:52:19.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/libi2pd_client/Torrents.cpp 2026-10-30 18:17:42.000000000 +0000 @@ -367,5 +367,5 @@ Piece::Piece (size_t size, const uint8_t * hash): - m_Size (size), m_Data (nullptr), m_IsSending (false), + m_Size (size), m_Data (nullptr), m_IsSending (false), m_IsRequested (false), m_LastActivityTimestamp (0), m_NumPeers (0) { @@ -532,4 +532,5 @@ auto offset = ind*REQUEST_BLOCK_SIZE; m_LastActivityTimestamp = i2p::util::GetMonotonicSeconds (); + m_IsRequested = true; return { offset, (offset + REQUEST_BLOCK_SIZE <= m_Size) ? REQUEST_BLOCK_SIZE : m_Size - offset }; } @@ -540,4 +541,5 @@ void Piece::ClearAllRequests () { + m_IsRequested = false; if (m_Blocks) m_Blocks->ClearRequests (); } @@ -2107,10 +2109,5 @@ if (m_NumRequests > 0) m_NumRequests--; if (index < m_Torrent->GetNumPieces ()) - { - Piece& piece = m_Torrent->GetPiece (index); - piece.BlockRequestRejected (offset); - if (m_LastRequestedPieceIndex == (int)index && !piece.IsRequested ()) - m_LastRequestedPieceIndex = -1; - } + m_Torrent->GetPiece (index).BlockRequestRejected (offset); RequestNextBlocks (); } diff -U2 -r /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/libi2pd_client/Torrents.h /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/libi2pd_client/Torrents.h --- /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/libi2pd_client/Torrents.h 2026-10-30 18:52:19.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/libi2pd_client/Torrents.h 2026-10-30 18:17:42.000000000 +0000 @@ -180,6 +180,5 @@ int GetNextBlockToRequest (); // -1 if no block - bool IsComplete () const { return m_Available.all (); } - bool IsRequested () const { return m_Requested.any (); } + bool IsComplete () const { return m_Available.all (); }; bool BlockReceived (size_t ind); // return true if updated bool IsBlockAvailable (size_t ind) const; @@ -203,9 +202,9 @@ bool IsComplete () const { return !m_Blocks; } - void Complete () { m_Blocks = nullptr; } + void Complete () { m_Blocks = nullptr; m_IsRequested = false; } bool VerifyHash () const; void SetIsSending (bool isSending); uint64_t GetLastActivityTimestamp () const { return m_LastActivityTimestamp; } - bool IsRequested () const { return m_Blocks ? m_Blocks->IsRequested () : false; } + bool IsRequested () const { return m_IsRequested; } size_t GetNumPeers () const { return m_NumPeers; } void SetNumPeers (size_t numPeers) { m_NumPeers = numPeers; } @@ -237,5 +236,5 @@ uint8_t * m_Data, m_Hash[SHA_DIGEST_LENGTH]; std::unique_ptr m_Blocks; - bool m_IsSending; + bool m_IsSending, m_IsRequested; uint64_t m_LastActivityTimestamp; // monotonic seconds size_t m_NumPeers; // where this piece is available