diff --git a/openair2/F1AP/f1ap_common.c b/openair2/F1AP/f1ap_common.c index 2e8d6073a8..91e7d85efe 100644 --- a/openair2/F1AP/f1ap_common.c +++ b/openair2/F1AP/f1ap_common.c @@ -49,13 +49,17 @@ f1ap_cudu_inst_t *getCxt(instance_t instanceP) return f1_inst[instanceP]; } +static pthread_mutex_t f1_inst_mtx = PTHREAD_MUTEX_INITIALIZER; void createF1inst(instance_t instanceP, f1ap_setup_req_t *req, f1ap_net_config_t *nc) { DevAssert(instanceP == 0); - DevAssert(req != NULL); - AssertFatal(f1_inst[0] == NULL, "Double call to F1 DU init\n"); + pthread_mutex_lock(&f1_inst_mtx); + AssertFatal(f1_inst[0] == NULL, "Attempted to initialize multiple F1 instances\n"); f1_inst[0] = calloc(1, sizeof(f1ap_cudu_inst_t)); AssertFatal(f1_inst[0] != NULL, "out of memory\n"); - f1_inst[0]->setupReq = *req; - f1_inst[0]->net_config = *nc; + if (req) + f1_inst[0]->setupReq = *req; + if (nc) + f1_inst[0]->net_config = *nc; + pthread_mutex_unlock(&f1_inst_mtx); } diff --git a/openair2/F1AP/f1ap_cu_task.c b/openair2/F1AP/f1ap_cu_task.c index 0003146d44..330d4f5422 100644 --- a/openair2/F1AP/f1ap_cu_task.c +++ b/openair2/F1AP/f1ap_cu_task.c @@ -52,6 +52,7 @@ static void cu_task_handle_sctp_association_ind(instance_t instance, sctp_new_association_ind_t *sctp_new_association_ind, eth_params_t *IPaddrs) { + createF1inst(instance, NULL, NULL); // save the assoc id f1ap_cudu_inst_t *f1ap_cu_data = getCxt(instance); f1ap_cu_data->assoc_id = sctp_new_association_ind->assoc_id;