diff --git a/lib/src/rlc/rlc_am_nr.cc b/lib/src/rlc/rlc_am_nr.cc index d2a604cf2..8fdd6bbbb 100644 --- a/lib/src/rlc/rlc_am_nr.cc +++ b/lib/src/rlc/rlc_am_nr.cc @@ -1132,9 +1132,9 @@ void rlc_am_nr_rx::handle_data_pdu(uint8_t* payload, uint32_t nof_bytes) * all bytes have been received. */ if (rx_mod_base_nr(header.sn) == rx_mod_base_nr(st.rx_highest_status)) { - uint32_t sn_upd = 0; - uint32_t window_top = st.rx_next + am_window_size(cfg.rx_sn_field_length); - for (sn_upd = (st.rx_highest_status + 1) % mod_nr; sn_upd < window_top; ++sn_upd) { + uint32_t sn_upd = 0; + for (sn_upd = (st.rx_highest_status + 1) % mod_nr; rx_mod_base_nr(sn_upd) < rx_mod_base_nr(st.rx_next_highest); + sn_upd = (sn_upd + 1) % mod_nr) { if (rx_window->has_sn(sn_upd)) { if (not(*rx_window)[sn_upd].fully_received) { break; // first SDU not fully received @@ -1155,7 +1155,8 @@ void rlc_am_nr_rx::handle_data_pdu(uint8_t* payload, uint32_t nof_bytes) if (rx_mod_base_nr(header.sn) == rx_mod_base_nr(st.rx_next)) { uint32_t sn_upd = 0; uint32_t window_top = st.rx_next + am_window_size(cfg.rx_sn_field_length); - for (sn_upd = st.rx_next; sn_upd < window_top; ++sn_upd) { + for (sn_upd = st.rx_next; rx_mod_base_nr(sn_upd) < rx_mod_base_nr(st.rx_next_highest); + sn_upd = (sn_upd + 1) % mod_nr) { if (rx_window->has_sn(sn_upd)) { if (not(*rx_window)[sn_upd].fully_received) { break; // first SDU not fully received