From a442087473b475dea8e473efb7ed1f87b3f56b50 Mon Sep 17 00:00:00 2001 From: rajalakshmisv Date: Thu, 10 Nov 2022 11:08:11 +0000 Subject: [PATCH] memory leak issues fixed Signed-off-by: rajalakshmisv Change-Id: I01b09cda96e48c1542b654f10e593a33ab183de0 --- control/rcE2AP.go | 4 ++-- control/rcE2SmRc.go | 2 +- e2ap/wrapper.c | 7 ++++++- e2sm/wrapper.c | 13 +++++++------ 4 files changed, 16 insertions(+), 10 deletions(-) diff --git a/control/rcE2AP.go b/control/rcE2AP.go index c2beae3..ed357c4 100644 --- a/control/rcE2AP.go +++ b/control/rcE2AP.go @@ -45,10 +45,10 @@ func (c *E2ap) GetControlAckMsg(payload []byte) (decodedMsg *ControlAckMsg, err cptr := unsafe.Pointer(&payload[0]) decodedMsg = &ControlAckMsg{} decodedCMsg := C.e2ap_decode_ric_control_acknowledge_message(cptr, C.size_t(len(payload))) + defer C.e2ap_free_decoded_ric_control_ack(decodedCMsg) if decodedCMsg == nil { return decodedMsg, errors.New("e2ap wrapper is unable to decode indication message due to wrong or invalid payload") } - defer C.e2ap_free_decoded_ric_control_ack(decodedCMsg) decodedMsg.RequestID = int32(decodedCMsg.requestorID) decodedMsg.InstanceId = int32(decodedCMsg.instanceID) @@ -66,10 +66,10 @@ func (c *E2ap) GetControlFailureMsg(payload []byte) (decodedMsg *ControlFailureM cptr := unsafe.Pointer(&payload[0]) decodedMsg = &ControlFailureMsg{} decodedCMsg := C.e2ap_decode_ric_control_failure_message(cptr, C.size_t(len(payload))) + defer C.e2ap_free_decoded_ric_control_failure(decodedCMsg) if decodedCMsg == nil { return decodedMsg, errors.New("e2ap wrapper is unable to decode control failure message due to wrong or invalid payload") } - defer C.e2ap_free_decoded_ric_control_failure(decodedCMsg) decodedMsg.RequestID = int32(decodedCMsg.requestorID) decodedMsg.InstanceId = int32(decodedCMsg.instanceID) diff --git a/control/rcE2SmRc.go b/control/rcE2SmRc.go index e2a8498..f72707c 100644 --- a/control/rcE2SmRc.go +++ b/control/rcE2SmRc.go @@ -117,10 +117,10 @@ func (c *E2sm) GetControlOutcome(buffer []byte) (controlOutcome *ControlOutcomeM //ml.MavLog(ml.INFO, lTransId, "Decode Control Outcome: ") xapp.Logger.Info("Decode Control Outcome: ") decodedMsg := C.e2sm_decode_ric_call_process_outcome(cptr, C.size_t(len(buffer))) + defer C.e2sm_free_ric_call_process_outcome(decodedMsg) if decodedMsg == nil { return controlOutcome, errors.New("e2sm wrapper is unable to get ControlOutcome due to wrong or invalid input") } - defer C.e2sm_free_ric_call_process_outcome(decodedMsg) //ml.MavLog(ml.INFO, lTransId, "Decoded Control Outcome: ") controlOutcome.ControlOutcomeType = int32(decodedMsg.ric_controlOutcome_formats.present) if controlOutcome.ControlOutcomeType == 1 { diff --git a/e2ap/wrapper.c b/e2ap/wrapper.c index d7a6395..729f8d0 100644 --- a/e2ap/wrapper.c +++ b/e2ap/wrapper.c @@ -188,6 +188,8 @@ RICControlAcknowledge* e2ap_decode_ric_control_acknowledge_message(void *buffer, msg->ricControlOutComeSize = ricControlOutComeSize; } } + if(pdu != NULL) + ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pdu); return msg; } } @@ -279,7 +281,10 @@ RICControlFailure* e2ap_decode_ric_control_failure_message(void *buffer, size_t } } - return msg; + if(pdu != NULL) + ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pdu); + + return msg; } } diff --git a/e2sm/wrapper.c b/e2sm/wrapper.c index c1d0be6..1847da2 100755 --- a/e2sm/wrapper.c +++ b/e2sm/wrapper.c @@ -15,10 +15,14 @@ ssize_t e2sm_encode_ric_control_header(void *buffer, size_t buf_size,struct uEID } controlHeaderIE->ric_controlHeader_formats.present = E2SM_RC_ControlHeader__ric_controlHeader_formats_PR_controlHeader_Format1; - E2SM_RC_ControlHeader_Format1_t *controlHeader_Fmt1 = (E2SM_RC_ControlHeader_Format1_t *)calloc(1, sizeof(E2SM_RC_ControlHeader_Format1_t)); + //E2SM_RC_ControlHeader_Format1_t *controlHeader_Fmt1 = (E2SM_RC_ControlHeader_Format1_t *)calloc(1, sizeof(E2SM_RC_ControlHeader_Format1_t)); + E2SM_RC_ControlHeader_Format1_t *controlHeader_Fmt1 = NULL; + controlHeaderIE->ric_controlHeader_formats.choice.controlHeader_Format1 = (E2SM_RC_ControlHeader_Format1_t *)calloc(1, sizeof(E2SM_RC_ControlHeader_Format1_t)); + controlHeader_Fmt1 = controlHeaderIE->ric_controlHeader_formats.choice.controlHeader_Format1; if(!controlHeader_Fmt1) { fprintf(stderr, "alloc E2SM_RC_ControlHeader failed\n"); + ASN_STRUCT_FREE(asn_DEF_E2SM_RC_ControlHeader, controlHeaderIE); return -1; } @@ -89,6 +93,7 @@ ssize_t e2sm_encode_ric_control_header(void *buffer, size_t buf_size,struct uEID } //f1AP is an array of data //int n = sizeof(f1AP)/sizeof(long int); + for(int i =0; i < f1AP_len; i++) { UEID_GNB_CU_CP_F1AP_ID_Item_t *F1AP_ID_Item = (UEID_GNB_CU_CP_F1AP_ID_Item_t *)calloc (1, sizeof(UEID_GNB_CU_CP_F1AP_ID_Item_t )); @@ -171,9 +176,7 @@ ssize_t e2sm_encode_nrcgi(NR_CGI_t *nr_cgi, void* plmnIdValue, size_t plmnId_si OCTET_STRING_fromBuf(&nr_cgi->pLMNIdentity,plmnIdValue, plmnId_size); //fprintf(stderr, "encodec Plmn Id = %s plmnIdValue %s and lNRCellId = %lu \n", nr_cgi->pLMNIdentity, plmnIdValue,lNRCellId); //fprintf(stderr, "encodec Plmn Id = %s and lNRCellId = %d \n", nr_cgi->pLMNIdentity,plmnIdValue,lNRCellId); - BIT_STRING_t *nr_cell_id = (BIT_STRING_t*)calloc(1, sizeof(BIT_STRING_t)); - if(nr_cell_id) - { + BIT_STRING_t *nr_cell_id = &nr_cgi->nRCellIdentity ; nr_cell_id->buf = (uint8_t*)calloc(1,5); if(nr_cell_id->buf) { @@ -185,9 +188,7 @@ ssize_t e2sm_encode_nrcgi(NR_CGI_t *nr_cgi, void* plmnIdValue, size_t plmnId_si nr_cell_id->buf[4] = (lNRCellId & 0X000000000F) << 4; nr_cell_id->bits_unused = 4; - nr_cgi->nRCellIdentity = *nr_cell_id; } - } fprintf(stderr, "showing xer of asn_DEF_NR_CGI NR_CGI_t data\n"); xer_fprint(stderr, &asn_DEF_NR_CGI, nr_cgi); -- 2.16.6