From 8ace25aa01ff67c8f32e903812cc34512cb5fc18 Mon Sep 17 00:00:00 2001 From: orignal Date: Mon, 29 Jun 2026 17:09:15 -0400 Subject: [PATCH] std::list for NACKed packets --- libi2pd/Streaming.cpp | 6 ++++-- libi2pd/Streaming.h | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/libi2pd/Streaming.cpp b/libi2pd/Streaming.cpp index 046ca0bf..0da2a508 100644 --- a/libi2pd/Streaming.cpp +++ b/libi2pd/Streaming.cpp @@ -696,7 +696,6 @@ namespace stream bool acknowledged = false; auto ts = i2p::util::GetMillisecondsSinceEpoch (); uint32_t ackThrough = packet->GetAckThrough (); - m_NACKedPackets.clear (); if (ackThrough > m_SequenceNumber) { LogPrint (eLogError, "Streaming: Unexpected ackThrough=", ackThrough, " > seqn=", m_SequenceNumber); @@ -708,6 +707,7 @@ namespace stream m_IsNAcked = false; m_IsResendNeeded = false; int nackCount = packet->GetNACKCount (); + std::list newNACKedPackets; for (auto it = m_SentPackets.begin (); it != m_SentPackets.end ();) { auto seqn = (*it)->GetSeqn (); @@ -719,7 +719,7 @@ namespace stream for (int i = 0; i < nackCount; i++) if (seqn == packet->GetNACK (i)) { - m_NACKedPackets.insert (*it); + newNACKedPackets.push_back (*it); m_IsNAcked = true; nacked = true; break; @@ -753,6 +753,8 @@ namespace stream else break; } + m_NACKedPackets.swap (newNACKedPackets); + if (m_LastACKRecieveTime) { uint64_t interval = ts - m_LastACKRecieveTime; diff --git a/libi2pd/Streaming.h b/libi2pd/Streaming.h index cd3eabc9..4f4b4da9 100644 --- a/libi2pd/Streaming.h +++ b/libi2pd/Streaming.h @@ -286,7 +286,7 @@ namespace stream std::queue m_ReceiveQueue; std::set m_SavedPackets; std::set m_SentPackets; - std::set m_NACKedPackets; + std::list m_NACKedPackets; boost::asio::steady_timer m_ReceiveTimer, m_SendTimer, m_ResendTimer, m_AckSendTimer; size_t m_NumSentBytes, m_NumReceivedBytes; uint16_t m_Port;