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-09-14 14:11:42.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/libi2pd_client/Torrents.cpp 2026-09-14 11:21:59.000000000 +0000 @@ -208,12 +208,7 @@ if (!f.is_open ()) { - auto mode = std::ios::binary | std::ios::in; auto filePath = fullFilePath; - if (isPart) - { - filePath += ".part"; - mode |= std::ios::out; - } - f.open (filePath, mode); + if (isPart) filePath += ".part"; + f.open (filePath, std::ios::binary | std::ios::in | std::ios::out); } auto ts = i2p::util::GetMonotonicSeconds (); @@ -326,22 +321,14 @@ void Piece::NewDataBuffer () { -#if defined(__cpp_lib_atomic_ref) std::atomic_ref data (m_Data); auto old = data.exchange (new uint8_t[m_Size]); if (old) delete[] old; -#else - if (!m_Data) m_Data = new uint8_t[m_Size]; -#endif } void Piece::DeleteDataBuffer () { -#if defined(__cpp_lib_atomic_ref) std::atomic_ref data (m_Data); auto old = data.exchange (nullptr); if (old) delete[] old; -#else - delete[] m_Data; m_Data = nullptr; -#endif } diff -U2 -r /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/libi2pd_client/TorrentsTunnel.cpp /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/libi2pd_client/TorrentsTunnel.cpp --- /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/libi2pd_client/TorrentsTunnel.cpp 2026-09-14 14:11:42.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/libi2pd_client/TorrentsTunnel.cpp 2026-09-14 11:21:59.000000000 +0000 @@ -807,4 +807,5 @@ auto ts = i2p::util::GetMonotonicSeconds (); for (auto it: m_Torrents) + { if (ts > it.second->GetNextUpdateStatusTime ()) { @@ -819,12 +820,13 @@ UpdatePeersPerPiece (it.second); } - boost::asio::post (GetDiskIOService (), [torrent = it.second, ts]() - { - for (auto it: torrent->GetFiles ()) - if (ts > it->lastAccessTime + TORRENT_FILE_INACTIVITY_TIMEOUT) - it->Close (); - }); it.second->SetNextUpdateStatusTime (ts + TORRENTS_STATUS_UPDATE_INTERVAL + GetLocalDestination ()->GetRng ()() % TORRENTS_STATUS_UPDATE_INTERVAL_VARIANCE); } + boost::asio::post (GetDiskIOService (), [torrent = it.second, ts]() + { + for (auto it: torrent->GetFiles ()) + if (ts > it->lastAccessTime + TORRENT_FILE_INACTIVITY_TIMEOUT) + it->Close (); + }); + } ScheduleStatusUpdate (); }