From 1e8f194d11b88acd5499969f3407013555e7be04 Mon Sep 17 00:00:00 2001
From: Robert Schmidt <robert.schmidt@openairinterface.org>
Date: Thu, 21 Mar 2024 17:59:44 +0100
Subject: [PATCH] Only release UE in PDCP if in E1

Explanations: see #706. TLDR: the RRC code calls nr_pdcp_remove_ue(), so
we should not call it in the E1 handler if we do not use split mode.
---
 openair2/LAYER2/nr_pdcp/cucp_cuup_handler.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/openair2/LAYER2/nr_pdcp/cucp_cuup_handler.c b/openair2/LAYER2/nr_pdcp/cucp_cuup_handler.c
index 2b65cf87f96..e18c8eddfb5 100644
--- a/openair2/LAYER2/nr_pdcp/cucp_cuup_handler.c
+++ b/openair2/LAYER2/nr_pdcp/cucp_cuup_handler.c
@@ -283,11 +283,12 @@ void e1_bearer_release_cmd(const e1ap_bearer_release_cmd_t *cmd)
   newGtpuDeleteAllTunnels(n3inst, cmd->gNB_cu_up_ue_id);
   if (f1inst >= 0)  // is there F1-U?
     newGtpuDeleteAllTunnels(f1inst, cmd->gNB_cu_up_ue_id);
-  nr_pdcp_remove_UE(cmd->gNB_cu_up_ue_id);
-  nr_sdap_delete_ue_entities(cmd->gNB_cu_up_ue_id);
   if (need_ue_id_mgmt) {
+    // see issue #706: in monolithic, gNB will free PDCP of UE
+    nr_pdcp_remove_UE(cmd->gNB_cu_up_ue_id);
     cu_remove_f1_ue_data(cmd->gNB_cu_up_ue_id);
   }
+  nr_sdap_delete_ue_entities(cmd->gNB_cu_up_ue_id);
 
   e1ap_bearer_release_cplt_t cplt = {
     .gNB_cu_cp_ue_id = cmd->gNB_cu_cp_ue_id,
-- 
GitLab