rlc am - fix bugs in buffered_pdcp_pdu_list

The count and container elements were not being correctly updated in the events
of SN overwrite, clear(), clear_pdcp_sdu(sn) of sn that doesnt exist
This commit is contained in:
Francisco 2021-04-07 10:23:42 +01:00 committed by Francisco Paisana
parent ebbb74e639
commit dc763b5045
2 changed files with 10 additions and 2 deletions

View File

@ -116,13 +116,20 @@ public:
void add_pdcp_sdu(uint32_t sn) void add_pdcp_sdu(uint32_t sn)
{ {
assert(not has_pdcp_sn(sn)); srsran_assert(not has_pdcp_sn(sn), "Cannot re-add same PDCP SN twice");
uint32_t sn_idx = get_idx(sn);
if (buffered_pdus[sn_idx].sn != invalid_sn) {
clear_pdcp_sdu(buffered_pdus[sn_idx].sn);
}
buffered_pdus[get_idx(sn)].sn = sn; buffered_pdus[get_idx(sn)].sn = sn;
count++; count++;
} }
void clear_pdcp_sdu(uint32_t sn) void clear_pdcp_sdu(uint32_t sn)
{ {
uint32_t sn_idx = get_idx(sn); uint32_t sn_idx = get_idx(sn);
if (buffered_pdus[sn_idx].sn == invalid_sn) {
return;
}
buffered_pdus[sn_idx].sn = invalid_sn; buffered_pdus[sn_idx].sn = invalid_sn;
buffered_pdus[sn_idx].fully_acked = false; buffered_pdus[sn_idx].fully_acked = false;
buffered_pdus[sn_idx].fully_txed = false; buffered_pdus[sn_idx].fully_txed = false;

View File

@ -2128,6 +2128,7 @@ buffered_pdcp_pdu_list::buffered_pdcp_pdu_list() : buffered_pdus(max_buffer_idx
void buffered_pdcp_pdu_list::clear() void buffered_pdcp_pdu_list::clear()
{ {
count = 0;
for (auto& b : buffered_pdus) { for (auto& b : buffered_pdus) {
b.sn = invalid_sn; b.sn = invalid_sn;
b.fully_acked = false; b.fully_acked = false;