From 70e1841bb1e985b42a198a9aca2033ec0dba20d6 Mon Sep 17 00:00:00 2001
From: Robert Schmidt <robert.schmidt@eurecom.fr>
Date: Wed, 5 Sep 2018 10:49:44 +0200
Subject: [PATCH] Fix: RAN API: remove_ul_slice() frees ul sched_name pointer,
 when sched_name set, free it when resetting

---
 openair2/ENB_APP/flexran_agent_ran_api.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/openair2/ENB_APP/flexran_agent_ran_api.c b/openair2/ENB_APP/flexran_agent_ran_api.c
index 0b41e4a479..973d322a5f 100644
--- a/openair2/ENB_APP/flexran_agent_ran_api.c
+++ b/openair2/ENB_APP/flexran_agent_ran_api.c
@@ -1756,6 +1756,8 @@ char *flexran_get_dl_slice_scheduler(mid_t mod_id, int slice_idx)
 int flexran_set_dl_slice_scheduler(mid_t mod_id, int slice_idx, char *name)
 {
   if (!mac_is_present(mod_id)) return 0;
+  if (RC.mac[mod_id]->slice_info.dl[slice_idx].sched_name)
+    free(RC.mac[mod_id]->slice_info.dl[slice_idx].sched_name);
   RC.mac[mod_id]->slice_info.dl[slice_idx].sched_name = strdup(name);
   RC.mac[mod_id]->slice_info.dl[slice_idx].sched_cb = dlsym(NULL, name);
   return RC.mac[mod_id]->slice_info.dl[slice_idx].sched_cb != NULL;
@@ -1788,7 +1790,7 @@ int flexran_remove_ul_slice(mid_t mod_id, int slice_idx)
   slice_info_t *sli = &RC.mac[mod_id]->slice_info;
   if (sli->n_ul <= 1) return -1;
 
-  if (sli->dl[slice_idx].sched_name) free(sli->dl[slice_idx].sched_name);
+  if (sli->ul[slice_idx].sched_name) free(sli->ul[slice_idx].sched_name);
   --sli->n_ul;
   /* move last element to the position of the removed one */
   if (slice_idx != sli->n_ul)
@@ -1869,6 +1871,8 @@ char *flexran_get_ul_slice_scheduler(mid_t mod_id, int slice_idx)
 int flexran_set_ul_slice_scheduler(mid_t mod_id, int slice_idx, char *name)
 {
   if (!mac_is_present(mod_id)) return 0;
+  if (RC.mac[mod_id]->slice_info.ul[slice_idx].sched_name)
+    free(RC.mac[mod_id]->slice_info.ul[slice_idx].sched_name);
   RC.mac[mod_id]->slice_info.ul[slice_idx].sched_name = strdup(name);
   RC.mac[mod_id]->slice_info.ul[slice_idx].sched_cb = dlsym(NULL, name);
   return RC.mac[mod_id]->slice_info.ul[slice_idx].sched_cb != NULL;
-- 
GitLab