Commit b564b116 authored by Robert Schmidt's avatar Robert Schmidt

Fix memory leaks in PROTO_AGENT

parent 7f40bf76
......@@ -131,6 +131,11 @@ error:
}
void proto_agent_stop(mod_id_t mod_id)
{
proto_agent_destroy_channel(proto_agent[mod_id].channel->channel_id);
}
//void
//proto_agent_send_hello(void)
//{
......@@ -164,24 +169,21 @@ proto_agent_send_rlc_data_req(const protocol_ctxt_t* const ctxt_pP,
int msg_flag = 0;
int msgsize = 0;
mod_id_t mod_id = ctxt_pP->module_id;
data_req_args args;
DevAssert(proto_agent[mod_id].channel);
DevAssert(proto_agent[mod_id].channel->channel_info);
data_req_args *args = malloc(sizeof(data_req_args));
args.ctxt = ctxt_pP;
args.srb_flag = srb_flagP;
args.MBMS_flag = MBMS_flagP;
args.rb_id = rb_idP;
args.mui = muiP;
args.confirm = confirmP;
args.sdu_size = sdu_sizeP;
args.sdu_p = sdu_pP;
args->ctxt = malloc(sizeof(protocol_ctxt_t));
memcpy(args->ctxt, ctxt_pP, sizeof(protocol_ctxt_t));
args->srb_flag = srb_flagP;
args->MBMS_flag = MBMS_flagP;
args->rb_id = rb_idP;
args->mui = muiP;
args->confirm = confirmP;
args->sdu_size = sdu_sizeP;
args->sdu_p = malloc(sdu_sizeP);
memcpy(args->sdu_p, sdu_pP->data, sdu_sizeP);
msg_flag = proto_agent_pdcp_data_req(mod_id, (void *) args, &init_msg);
msg_flag = proto_agent_pdcp_data_req(mod_id, (void *) &args, &init_msg);
if (msg_flag != 0 || !init_msg) goto error;
msg = proto_agent_pack_message(init_msg, &msgsize);
......@@ -206,22 +208,19 @@ proto_agent_send_pdcp_data_ind(const protocol_ctxt_t* const ctxt_pP, const srb_f
int msg_flag = 0;
int msgsize = 0;
mod_id_t mod_id = ctxt_pP->module_id;
data_req_args args;
DevAssert(proto_agent[mod_id].channel);
DevAssert(proto_agent[mod_id].channel->channel_info);
data_req_args *args = malloc(sizeof(data_req_args));
args->ctxt = malloc(sizeof(protocol_ctxt_t));
memcpy(args->ctxt, ctxt_pP, sizeof(protocol_ctxt_t));
args->srb_flag = srb_flagP;
args->MBMS_flag = MBMS_flagP;
args->rb_id = rb_idP;
args->sdu_size = sdu_sizeP;
args->sdu_p = malloc(sdu_sizeP);
memcpy(args->sdu_p, sdu_pP->data, sdu_sizeP);
args.ctxt = ctxt_pP;
args.srb_flag = srb_flagP;
args.MBMS_flag = MBMS_flagP;
args.rb_id = rb_idP;
args.sdu_size = sdu_sizeP;
args.sdu_p = sdu_pP;
msg_flag = proto_agent_pdcp_data_ind(mod_id, (void *) args, &init_msg);
msg_flag = proto_agent_pdcp_data_ind(mod_id, (void *) &args, &init_msg);
if (msg_flag != 0 || !init_msg) goto error;
msg = proto_agent_pack_message(init_msg, &msgsize);
......@@ -232,7 +231,7 @@ proto_agent_send_pdcp_data_ind(const protocol_ctxt_t* const ctxt_pP, const srb_f
return;
error:
LOG_E(PROTO_AGENT, "there was an error\n");
LOG_E(PROTO_AGENT, "there was an error in %s\n", __func__);
return;
}
......
......@@ -46,6 +46,7 @@
void * proto_agent_receive(void *args);
int proto_agent_start(mod_id_t mod_id, const cudu_params_t *p);
void proto_agent_stop(mod_id_t mod_id);
void proto_agent_send_rlc_data_req( const protocol_ctxt_t* const ctxt_pP,
const srb_flag_t srb_flagP, const MBMS_flag_t MBMS_flagP,
......
......@@ -68,7 +68,8 @@ proto_agent_async_channel_info(mod_id_t mod_id, const char *bind_ip, uint16_t bi
return channel;
error:
LOG_E(PROTO_AGENT,"there was an error\n");
if (channel)
free(channel);
fprintf(stderr, "error creating proto_agent_async_channel_t\n");
return NULL;
}
......@@ -87,8 +88,7 @@ int proto_agent_async_msg_recv(void **data, int *size, int *priority, void *chan
void proto_agent_async_release(proto_agent_channel_t *channel)
{
proto_agent_async_channel_t *channel_info;
channel_info = (proto_agent_async_channel_t *) channel->channel_info;
proto_agent_async_channel_t *channel_info = channel->channel_info;
destroy_link_manager(channel_info->manager);
......
......@@ -453,8 +453,12 @@ int proto_agent_destroy_pdcp_data_ind(Protocol__FlexsplitMessage *msg)
if(msg->msg_case != PROTOCOL__FLEXSPLIT_MESSAGE__MSG_DATA_IND_MSG)
goto error;
free(msg->data_req_ack->header);
free(msg->data_req_ack);
free(msg->data_ind_msg->header);
free(msg->data_ind_msg->rlc_data->fsp_pdu->fsp_pdu_data.data);
free(msg->data_ind_msg->rlc_data->fsp_pdu);
free(msg->data_ind_msg->rlc_data->fsp_ctxt);
free(msg->data_ind_msg->rlc_data);
free(msg->data_ind_msg);
free(msg);
return 0;
......
......@@ -104,10 +104,8 @@ Protocol__FlexsplitMessage* proto_agent_handle_message (mod_id_t mod_id,
LOG_I(PROTO_AGENT, "decoded_message case : %d, direction : %d \n", decoded_message->msg_case-1, decoded_message->msg_dir-1);
goto error;
}
else if (err_code == 1)
{
protocol__flexsplit_message__free_unpacked(decoded_message, NULL);
}
LOG_D(PROTO_AGENT,"Returning REPLY message after the callback\n");
return reply_message;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment