rlc_am: fix bug where PDU was erased from tx_window too early

This commit is contained in:
Andre Puschmann 2018-02-07 20:50:03 +01:00
parent bfb3155da6
commit bde37de866
1 changed files with 10 additions and 11 deletions

View File

@ -1069,20 +1069,19 @@ void rlc_am::handle_control_pdu(uint8_t *payload, uint32_t nof_bytes)
//ACKed SNs get marked and removed from tx_window if possible //ACKed SNs get marked and removed from tx_window if possible
if(tx_window.count(i) > 0) { if(tx_window.count(i) > 0) {
it = tx_window.find(i); it = tx_window.find(i);
it->second.is_acked = true; if (it != tx_window.end()) {
if(update_vt_a) {
tx_window.erase(it);
if(it->second.buf) { if(it->second.buf) {
pool->deallocate(it->second.buf); pool->deallocate(it->second.buf);
it->second.buf = 0; it->second.buf = 0;
log->info("SN=%d removed from tx_window\n", i);
} }
tx_window.erase(it);
if(update_vt_a)
{
vt_a = (vt_a + 1)%MOD; vt_a = (vt_a + 1)%MOD;
vt_ms = (vt_ms + 1)%MOD; vt_ms = (vt_ms + 1)%MOD;
} }
} }
} }
}
i = (i+1)%MOD; i = (i+1)%MOD;
} }