diff --git a/src/security/tls_session.cpp b/src/security/tls_session.cpp index cf3fa7043d058977c35373b6681a4f368d1c5d82..423eca605ab5da37a6d35777d134d0ac9296eb55 100644 --- a/src/security/tls_session.cpp +++ b/src/security/tls_session.cpp @@ -962,16 +962,17 @@ TlsSession::flushRxQueue() // Loop on offset-ordered received packet until a discontinuity in sequence number while (item != std::end(reorderBuffer_) and item->first <= next_offset) { auto pkt_offset = item->first; - auto& pkt = item->second; + auto pkt = std::move(item->second); + + // Remove item before unlocking to not trash the item' relationship + next_offset = pkt_offset + 1; + item = reorderBuffer_.erase(item); if (callbacks_.onRxData) { lk.unlock(); callbacks_.onRxData(std::move(pkt)); lk.lock(); } - - next_offset = pkt_offset + 1; - item = reorderBuffer_.erase(item); } gapOffset_ = std::max(gapOffset_, next_offset);