From be5bbbd86ca31666af8fbbf66d78e575266d6543 Mon Sep 17 00:00:00 2001
From: Wu Jing <wu.jing@cn.fujitsu.com>
Date: Sat, 8 Jun 2019 13:34:58 +0900
Subject: [PATCH] clear rlc-am data after retransmission 5 times when doing
 rrcconnectionreestablishment

---
 .../LAYER2/RLC/AM_v9.3.0/rlc_am_retransmit.c  | 25 +++++++++++++++++++
 1 file changed, 25 insertions(+)

diff --git a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_retransmit.c b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_retransmit.c
index 2f001bdcfd8..4d34338ea98 100644
--- a/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_retransmit.c
+++ b/openair2/LAYER2/RLC/AM_v9.3.0/rlc_am_retransmit.c
@@ -806,6 +806,7 @@ mem_block_t * rlc_am_get_pdu_to_retransmit(
 	  rlc_sn_t             sn          = rlc_pP->vt_a;
 	  rlc_sn_t             sn_end      = rlc_pP->vt_s;
 	  mem_block_t*         pdu_p        = NULL;
+	  mem_block_t*         mb_p         = NULL;
 	  rlc_am_tx_data_pdu_management_t* tx_data_pdu_management;
 //Assertion(eNB)_PRAN_DesignDocument_annex No.769
       if((rlc_pP->retrans_num_pdus <= 0) || (rlc_pP->vt_a ==  rlc_pP->vt_s))
@@ -884,6 +885,18 @@ mem_block_t * rlc_am_get_pdu_to_retransmit(
 					                PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP),
 									tx_data_pdu_management->retx_count_next,
 					                sn);
+					  mb_p = rlc_pP->tx_data_pdu_buffer[sn % RLC_AM_WINDOW_SIZE].mem_block;
+					  if(mb_p != NULL){
+					    free_mem_block(mb_p, __func__);
+					    tx_data_pdu_management->mem_block = NULL;
+					    tx_data_pdu_management->flags.retransmit = 0;
+					    tx_data_pdu_management->flags.ack = 1;
+					    tx_data_pdu_management->flags.transmitted = 0;
+					    rlc_pP->retrans_num_bytes_to_retransmit -= tx_data_pdu_management->retx_payload_size;
+					    tx_data_pdu_management->retx_payload_size = 0;
+					    tx_data_pdu_management->num_holes = 0;
+					    rlc_pP->retrans_num_pdus --;
+					  }
 				  }
 			  }
 			  else if (rlc_pP->nb_bytes_requested_by_mac >= 5)
@@ -938,6 +951,18 @@ mem_block_t * rlc_am_get_pdu_to_retransmit(
 					  					                PROTOCOL_RLC_AM_CTXT_ARGS(ctxt_pP,rlc_pP),
 					  									tx_data_pdu_management->retx_count_next,
 					  					                sn);
+					  mb_p = rlc_pP->tx_data_pdu_buffer[sn % RLC_AM_WINDOW_SIZE].mem_block;
+					  if(mb_p != NULL){
+					    free_mem_block(mb_p, __func__);
+					    tx_data_pdu_management->mem_block = NULL;
+					    tx_data_pdu_management->flags.retransmit = 0;
+					    tx_data_pdu_management->flags.ack = 1;
+					    tx_data_pdu_management->flags.transmitted = 0;
+					    rlc_pP->retrans_num_bytes_to_retransmit -= tx_data_pdu_management->retx_payload_size;
+					    tx_data_pdu_management->retx_payload_size = 0;
+					    tx_data_pdu_management->num_holes = 0;
+					    rlc_pP->retrans_num_pdus --;
+					  }
 				  }
 			  }
 
-- 
GitLab