From d82ebce55b06adc6e5b8abfe01a0f204b8ad6870 Mon Sep 17 00:00:00 2001
From: Masayuki HARADA <masayuki.harada@jp.fujitsu.com>
Date: Thu, 15 Feb 2018 20:10:08 +0900
Subject: [PATCH] If TB buffer's all regments recieved is NOT equal RLC's all
 regments recieved, discard that TB buffer.

---
 openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_receiver.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_receiver.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_receiver.c
index b1facdfb02..42bdd56e77 100644
--- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_receiver.c
+++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_receiver.c
@@ -396,14 +396,20 @@ rlc_am_receive_process_data_pdu (
         }
 
         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) {
             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;
           }
-
           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...
-
+}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
-- 
GitLab