diff -U2 -r /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/libi2pd/Streaming.cpp /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/libi2pd/Streaming.cpp --- /var/lib/copr-rpmbuild/results/i2pd-git/upstream-unpacked/Source0/i2pd-openssl/libi2pd/Streaming.cpp 2026-08-23 20:03:38.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/i2pd-git/srpm-unpacked/i2pd-openssl.tar.gz-extract/i2pd-openssl/libi2pd/Streaming.cpp 2026-08-23 18:58:28.000000000 +0000 @@ -294,20 +294,17 @@ if (m_Status == eStreamStatusTerminated) return; - if (!m_SavedPackets.empty ()) + // we should also try stored messages if any + for (auto it = m_SavedPackets.begin (); it != m_SavedPackets.end ();) { - // we should also try stored messages if any - auto it = m_SavedPackets.begin (); - while (it != m_SavedPackets.end ()) + if ((*it)->GetSeqn () == (uint32_t)(m_LastReceivedSequenceNumber + 1)) { - if ((*it)->GetSeqn () == (uint32_t)(m_LastReceivedSequenceNumber + 1)) - { - ProcessPacket (*it); - it++; - } - else - break; + Packet * savedPacket = *it; + m_SavedPackets.erase (it++); + + ProcessPacket (savedPacket); + if (m_Status == eStreamStatusTerminated) return; } - m_SavedPackets.erase (m_SavedPackets.begin (), it); - if (m_Status == eStreamStatusTerminated) return; // status migth have changed in ProcessPacket + else + break; }