If TB buffer's all regments recieved is NOT equal RLC's all regments recieved, discard that TB buffer.
This commit is contained in:
@@ -396,14 +396,20 @@ rlc_am_receive_process_data_pdu (
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (pdu_info_p->sn == rlc_pP->vr_r) {
|
if (pdu_info_p->sn == rlc_pP->vr_r) {
|
||||||
|
mem_block_t* cursor_p = rlc_pP->receiver_buffer.head;
|
||||||
|
rlc_am_rx_pdu_management_t * pdu_cursor_mgnt_p = (rlc_am_rx_pdu_management_t *) (cursor_p->data);
|
||||||
|
if( (((rlc_am_rx_pdu_management_t*)(tb_pP->data))->all_segments_received) == (pdu_cursor_mgnt_p->all_segments_received)){
|
||||||
if (((rlc_am_rx_pdu_management_t*)(tb_pP->data))->all_segments_received) {
|
if (((rlc_am_rx_pdu_management_t*)(tb_pP->data))->all_segments_received) {
|
||||||
rlc_am_rx_update_vr_r(ctxt_pP, rlc_pP, tb_pP);
|
rlc_am_rx_update_vr_r(ctxt_pP, rlc_pP, tb_pP);
|
||||||
rlc_pP->vr_mr = (rlc_pP->vr_r + RLC_AM_WINDOW_SIZE) & RLC_AM_SN_MASK;
|
rlc_pP->vr_mr = (rlc_pP->vr_r + RLC_AM_WINDOW_SIZE) & RLC_AM_SN_MASK;
|
||||||
}
|
}
|
||||||
|
|
||||||
reassemble = rlc_am_rx_check_vr_reassemble(ctxt_pP, rlc_pP);
|
reassemble = rlc_am_rx_check_vr_reassemble(ctxt_pP, rlc_pP);
|
||||||
//TODO : optimization : check whether a reassembly is needed by looking at LI, FI, SO, etc...
|
//TODO : optimization : check whether a reassembly is needed by looking at LI, FI, SO, etc...
|
||||||
|
}else{
|
||||||
|
LOG_E(RLC, "BAD all_segments_received!!! discard buffer!!!\n");
|
||||||
|
/* Discard received block if out of window, duplicate or header error */
|
||||||
|
free_mem_block (tb_pP, __func__);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//FNA: fix check VrX out of receiving window
|
//FNA: fix check VrX out of receiving window
|
||||||
|
|||||||
Reference in New Issue
Block a user