diff --git a/openair2/ENB_APP/flexran_agent.c b/openair2/ENB_APP/flexran_agent.c index ff91d711d986c9a785e264ff2257ef0c329a9350..24ed07ac9255d0448af4d92c3f73ee1c31282e39 100644 --- a/openair2/ENB_APP/flexran_agent.c +++ b/openair2/ENB_APP/flexran_agent.c @@ -115,7 +115,7 @@ void *receive_thread(void *args) { while (1) { - while (flexran_agent_msg_recv(d->mod_id, FLEXRAN_AGENT_DEFAULT, &data, &size, &priority) == 0) { + while ((size = flexran_agent_msg_recv(d->mod_id, FLEXRAN_AGENT_DEFAULT, &data, &priority)) > 0) { LOG_D(FLEXRAN_AGENT,"received message with size %d\n", size); diff --git a/openair2/ENB_APP/flexran_agent_async.c b/openair2/ENB_APP/flexran_agent_async.c index 34d2f5b1e8e72834a8e696dc68d0297b1220be74..fa2e0c9ff583c1f5d7e697f325f2b514b5f3cffb 100644 --- a/openair2/ENB_APP/flexran_agent_async.c +++ b/openair2/ENB_APP/flexran_agent_async.c @@ -94,11 +94,11 @@ int flexran_agent_async_msg_send(void *data, int size, int priority, void *chann return message_put(channel->send_queue, data, size, priority); } -int flexran_agent_async_msg_recv(void **data, int *size, int *priority, void *channel_info) { +int flexran_agent_async_msg_recv(void **data, int *priority, void *channel_info) { flexran_agent_async_channel_t *channel; channel = (flexran_agent_async_channel_t *)channel_info; - return message_get(channel->receive_queue, data, size, priority); + return message_get(channel->receive_queue, data, priority); } void flexran_agent_async_release(flexran_agent_channel_t *channel) { diff --git a/openair2/ENB_APP/flexran_agent_async.h b/openair2/ENB_APP/flexran_agent_async.h index 03aebd0058fc6c3293baa664119124e6921f6ef2..1ebc565f62b31a5555ac00add7a9d4e50912878a 100644 --- a/openair2/ENB_APP/flexran_agent_async.h +++ b/openair2/ENB_APP/flexran_agent_async.h @@ -46,7 +46,7 @@ flexran_agent_async_channel_t * flexran_agent_async_channel_info(mid_t mod_id, c int flexran_agent_async_msg_send(void *data, int size, int priority, void *channel_info); /* Receive a message from a given channel */ -int flexran_agent_async_msg_recv(void **data, int *size, int *priority, void *channel_info); +int flexran_agent_async_msg_recv(void **data, int *priority, void *channel_info); /* Release a channel */ void flexran_agent_async_release(flexran_agent_channel_t *channel); diff --git a/openair2/ENB_APP/flexran_agent_net_comm.c b/openair2/ENB_APP/flexran_agent_net_comm.c index d5142e5456eeb10b86c6f7cd944929c0fdaf0804..0d1c52096dce1bc277a217c0dac5e93ce60f8144 100644 --- a/openair2/ENB_APP/flexran_agent_net_comm.c +++ b/openair2/ENB_APP/flexran_agent_net_comm.c @@ -53,7 +53,7 @@ int flexran_agent_msg_send(mid_t mod_id, agent_id_t agent_id, void *data, int si return -1; } -int flexran_agent_msg_recv(mid_t mod_id, agent_id_t agent_id, void **data, int *size, int *priority) { +int flexran_agent_msg_recv(mid_t mod_id, agent_id_t agent_id, void **data, int *priority) { /*Check if agent id is valid*/ if (agent_id >= FLEXRAN_AGENT_MAX || agent_id < 0) { goto error; @@ -66,7 +66,7 @@ int flexran_agent_msg_recv(mid_t mod_id, agent_id_t agent_id, void **data, int * goto error; } - return channel->msg_recv(data, size, priority, channel->channel_info); + return channel->msg_recv(data, priority, channel->channel_info); error: LOG_E(FLEXRAN_AGENT, "No channel registered for agent with id %d\n", agent_id); @@ -104,7 +104,7 @@ void flexran_agent_unregister_channel(mid_t mod_id, agent_id_t agent_id) { int flexran_agent_create_channel(void *channel_info, int (*msg_send)(void *data, int size, int priority, void *channel_info), - int (*msg_recv)(void **data, int *size, int *priority, void *channel_info), + int (*msg_recv)(void **data, int *priority, void *channel_info), void (*release)(flexran_agent_channel_t *channel)) { int channel_id = ++flexran_agent_channel_id; diff --git a/openair2/ENB_APP/flexran_agent_net_comm.h b/openair2/ENB_APP/flexran_agent_net_comm.h index 2f59b0f7a379f90659e127ac2244cbba935b4919..4d012989fd80fe0788b58f8c40451f7aa78d63ef 100644 --- a/openair2/ENB_APP/flexran_agent_net_comm.h +++ b/openair2/ENB_APP/flexran_agent_net_comm.h @@ -39,7 +39,7 @@ int channel_id; void *channel_info; /*Callbacks for channel message Tx and Rx*/ int (*msg_send)(void *data, int size, int priority, void *channel_info); -int (*msg_recv)(void **data, int *size, int *priority, void *channel_info); +int (*msg_recv)(void **data, int *priority, void *channel_info); void (*release)(struct flexran_agent_channel_s *channel); } flexran_agent_channel_t; @@ -49,7 +49,7 @@ typedef struct flexran_agent_channel_instance_s{ /*Send and receive messages using the channel registered for a specific agent*/ int flexran_agent_msg_send(mid_t mod_id, agent_id_t agent_id, void *data, int size, int priority); -int flexran_agent_msg_recv(mid_t mod_id, agent_id_t agent_id, void **data, int *size, int *priority); +int flexran_agent_msg_recv(mid_t mod_id, agent_id_t agent_id, void **data, int *priority); /*Register a channel to an agent. Use FLEXRAN_AGENT_MAX to register the *same channel to all agents*/ @@ -61,7 +61,7 @@ void flexran_agent_unregister_channel(mid_t mod_id, agent_id_t agent_id); /*Create a new channel. Returns the id of the new channel or negative number otherwise*/ int flexran_agent_create_channel(void *channel_info, int (*msg_send)(void *data, int size, int priority, void *channel_info), - int (*msg_recv)(void **data, int *size, int *priority, void *channel_info), + int (*msg_recv)(void **data, int *priority, void *channel_info), void (*release)(flexran_agent_channel_t *channel)); /*Unregister a channel from all agents and destroy it. Returns 0 in case of success*/ diff --git a/openair2/LAYER2/PROTO_AGENT/proto_agent.c b/openair2/LAYER2/PROTO_AGENT/proto_agent.c index 00441aeed572ffef88836c55a0aa2265c864e352..148392280b697b0e01ac78c6d9c7fb2fd8cd279e 100644 --- a/openair2/LAYER2/PROTO_AGENT/proto_agent.c +++ b/openair2/LAYER2/PROTO_AGENT/proto_agent.c @@ -266,7 +266,7 @@ proto_agent_receive(void *args) msg = NULL; ser_msg = NULL; - if (proto_agent_async_msg_recv(&data, &size, &priority, inst->channel->channel_info)){ + if ((size = proto_agent_async_msg_recv(&data, &priority, inst->channel->channel_info)) <= 0){ err_code = PROTOCOL__FLEXSPLIT_ERR__MSG_ENQUEUING; goto error; } diff --git a/openair2/LAYER2/PROTO_AGENT/proto_agent_async.c b/openair2/LAYER2/PROTO_AGENT/proto_agent_async.c index 94532b1942d2ad3b4cca5216838cb7b8690b3ef9..476ecac90d68e236c943f4f912fd7b67eb981c29 100644 --- a/openair2/LAYER2/PROTO_AGENT/proto_agent_async.c +++ b/openair2/LAYER2/PROTO_AGENT/proto_agent_async.c @@ -78,10 +78,10 @@ int proto_agent_async_msg_send(void *data, int size, int priority, void *channel return message_put(channel->send_queue, data, size, priority); } -int proto_agent_async_msg_recv(void **data, int *size, int *priority, void *channel_info) +int proto_agent_async_msg_recv(void **data, int *priority, void *channel_info) { proto_agent_async_channel_t *channel = channel_info; - return message_get(channel->receive_queue, data, size, priority); + return message_get(channel->receive_queue, data, priority); } void proto_agent_async_release(proto_agent_channel_t *channel) diff --git a/openair2/LAYER2/PROTO_AGENT/proto_agent_async.h b/openair2/LAYER2/PROTO_AGENT/proto_agent_async.h index 7658e1d98fb32acc61af43d58fc42655290e6114..12050480525bef457598a6d9f24494cf5ae0ea79 100644 --- a/openair2/LAYER2/PROTO_AGENT/proto_agent_async.h +++ b/openair2/LAYER2/PROTO_AGENT/proto_agent_async.h @@ -53,7 +53,7 @@ proto_agent_async_channel_info(mod_id_t mod_id, const char *bind_ip, uint16_t bi int proto_agent_async_msg_send(void *data, int size, int priority, void *channel_info); -int proto_agent_async_msg_recv(void **data, int *size, int *priority, void *channel_info); +int proto_agent_async_msg_recv(void **data, int *priority, void *channel_info); void proto_agent_async_release(proto_agent_channel_t *channel); diff --git a/openair2/LAYER2/PROTO_AGENT/proto_agent_net_comm.c b/openair2/LAYER2/PROTO_AGENT/proto_agent_net_comm.c index 5788bd0830da42fb6c3dc36cf16803427635f266..d396748d76e6b41b51da5ea5b28fe4e03f6ddcf7 100644 --- a/openair2/LAYER2/PROTO_AGENT/proto_agent_net_comm.c +++ b/openair2/LAYER2/PROTO_AGENT/proto_agent_net_comm.c @@ -72,7 +72,7 @@ void proto_agent_unregister_channel(mod_id_t mod_id, proto_agent_id_t agent_id) int proto_agent_create_channel(void *channel_info, int (*msg_send)(void *data, int size, int priority, void *channel_info), - int (*msg_recv)(void **data, int *size, int *priority, void *channel_info), + int (*msg_recv)(void **data, int *priority, void *channel_info), void (*release)(proto_agent_channel_t *channel)) { int channel_id = ++proto_agent_channel_id; diff --git a/openair2/LAYER2/PROTO_AGENT/proto_agent_net_comm.h b/openair2/LAYER2/PROTO_AGENT/proto_agent_net_comm.h index c88ba35b1369ee0feb84678898c8e41eae7469c8..c956bf48b1daf93e435c7e15a800d196151f214e 100644 --- a/openair2/LAYER2/PROTO_AGENT/proto_agent_net_comm.h +++ b/openair2/LAYER2/PROTO_AGENT/proto_agent_net_comm.h @@ -51,7 +51,7 @@ typedef struct proto_agent_channel_s { struct proto_agent_async_channel_s *channel_info; /*Callbacks for channel message Tx and Rx*/ int (*msg_send)(void *data, int size, int priority, void *channel_info); - int (*msg_recv)(void **data, int *size, int *priority, void *channel_info); + int (*msg_recv)(void **data, int *priority, void *channel_info); void (*release)(struct proto_agent_channel_s *channel); } proto_agent_channel_t; @@ -70,7 +70,7 @@ void proto_agent_unregister_channel(mod_id_t mod_id, proto_agent_id_t agent_id); /*Create a new channel. Returns the id of the new channel or negative number otherwise*/ int proto_agent_create_channel(void *channel_info, int (*msg_send)(void *data, int size, int priority, void *channel_info), - int (*msg_recv)(void **data, int *size, int *priority, void *channel_info), + int (*msg_recv)(void **data, int *priority, void *channel_info), void (*release)(proto_agent_channel_t *channel)); /*Unregister a channel from all agents and destroy it. Returns 0 in case of success*/ diff --git a/openair2/UTIL/ASYNC_IF/link_manager.c b/openair2/UTIL/ASYNC_IF/link_manager.c index 9ac06b8ad5df4149bd7dc77f44ef54273af15ceb..110b9edb7e7e9483cc2261b286a276d444e9adda 100644 --- a/openair2/UTIL/ASYNC_IF/link_manager.c +++ b/openair2/UTIL/ASYNC_IF/link_manager.c @@ -46,7 +46,7 @@ static void *link_manager_sender_thread(void *_manager) LOG_D(MAC, "starting link manager sender thread\n"); while (manager->run) { - while (message_get(manager->send_queue, &data, &size, &priority) == 0) { + while ((size = message_get(manager->send_queue, &data, &priority)) > 0) { link_send_packet(manager->socket_link, data, size, manager->peer_addr, manager->peer_port); free(data); } @@ -184,7 +184,7 @@ int main(void) data = strdup("hello"); if (data == NULL) goto error; if (message_put(send_queue, data, 6, 100)) goto error; - if (message_get(receive_queue, &data, &size, &priority)) goto error; + if ((size = message_get(receive_queue, &data, &priority)) <= 0) goto error; printf("received message:\n"); printf(" data: %s\n", (char *)data); printf(" size: %d\n", size); @@ -228,7 +228,7 @@ int main(void) manager = create_link_manager(send_queue, receive_queue, link); if (manager == NULL) goto error; - if (message_get(receive_queue, &data, &size, &priority)) goto error; + if ((size = message_get(receive_queue, &data, &priority)) <= 0) goto error; printf("received message:\n"); printf(" data: %s\n", (char *)data); printf(" size: %d\n", size); diff --git a/openair2/UTIL/ASYNC_IF/message_queue.c b/openair2/UTIL/ASYNC_IF/message_queue.c index 5a33fbfabe7c8a027e15a3dedb6d2e7da2cff67a..42790bdaaa5b80e6d43db80bdc74778ece8a0bf0 100644 --- a/openair2/UTIL/ASYNC_IF/message_queue.c +++ b/openair2/UTIL/ASYNC_IF/message_queue.c @@ -72,6 +72,8 @@ error: int message_put(message_queue_t *queue, void *data, int size, int priority) { message_t *m = NULL; + if (size <= 0) + goto error; m = calloc(1, sizeof(message_t)); if (m == NULL) @@ -106,12 +108,12 @@ int message_put(message_queue_t *queue, void *data, int size, int priority) return 0; error: - free(m); + if (m) free(m); LOG_E(MAC, "%s: an error occured\n", __FUNCTION__); return -1; } -int message_get(message_queue_t *queue, void **data, int *size, int *priority) +int message_get(message_queue_t *queue, void **data, int *priority) { message_t *m; @@ -136,12 +138,11 @@ int message_get(message_queue_t *queue, void **data, int *size, int *priority) goto error; *data = m->data; - *size = m->size; + const int size = m->size; *priority = m->priority; free(m); - return 0; - + return size; error: LOG_E(MAC, "%s: an error occured\n", __FUNCTION__); return -1; @@ -181,10 +182,10 @@ int main(void) if (message_put(q, "hello", 6, 0)) goto error; if (message_put(q, "world", 6, 1)) goto error; - if (message_get(q, &data, &size, &priority)) goto error; + if ((size = message_get(q, &data, &priority)) <= 0) goto error; printf("message:\n data: '%s'\n size: %d\n priority: %d\n", (char *)data, size, priority); - if (message_get(q, &data, &size, &priority)) goto error; + if ((size = message_get(q, &data, &priority)) <= 0) goto error; printf("message:\n data: '%s'\n size: %d\n priority: %d\n", (char *)data, size, priority); diff --git a/openair2/UTIL/ASYNC_IF/message_queue.h b/openair2/UTIL/ASYNC_IF/message_queue.h index e5fc36ecd5f315711b6ec9ab5b20f34aeb8ff320..6d8d2a591a7061c81508e79e11fd6960796b6e75 100644 --- a/openair2/UTIL/ASYNC_IF/message_queue.h +++ b/openair2/UTIL/ASYNC_IF/message_queue.h @@ -55,7 +55,7 @@ typedef struct { message_queue_t *new_message_queue(void); int message_put(message_queue_t *queue, void *data, int size, int priority); -int message_get(message_queue_t *queue, void **data, int *size, int *priority); +int message_get(message_queue_t *queue, void **data, int *priority); void destroy_message_queue(message_queue_t *queue); #ifdef __cplusplus diff --git a/openair2/UTIL/ASYNC_IF/ringbuffer_queue.c b/openair2/UTIL/ASYNC_IF/ringbuffer_queue.c index 201603e0c57f327541c7aa0da91ba076a9393ced..f46ca41d788e106bc9e9539807cd2ae213663b9b 100644 --- a/openair2/UTIL/ASYNC_IF/ringbuffer_queue.c +++ b/openair2/UTIL/ASYNC_IF/ringbuffer_queue.c @@ -67,6 +67,9 @@ int message_put(message_queue_t *queue, void *data, int size, int priority) { message_t *overwritten_msg; message_t *m = NULL; + if (size <= 0) + goto error; + LFDS700_MISC_MAKE_VALID_ON_CURRENT_LOGICAL_CORE_INITS_COMPLETED_BEFORE_NOW_ON_ANY_OTHER_LOGICAL_CORE; lfds700_misc_prng_init(&ls); @@ -94,12 +97,11 @@ int message_put(message_queue_t *queue, void *data, int size, int priority) { return 0; error: - free(m); LOG_E(MAC, "%s: an error occured\n", __FUNCTION__); return -1; } -int message_get(message_queue_t *queue, void **data, int *size, int *priority) { +int message_get(message_queue_t *queue, void **data, int *priority) { message_t *m; struct lfds700_misc_prng_state ls; @@ -111,10 +113,10 @@ int message_get(message_queue_t *queue, void **data, int *size, int *priority) { } *data = m->data; - *size = m->size; + const int size = m->size; *priority = m->priority; free(m); - return 0; + return size; } void destroy_message_queue(message_queue_t *queue) { diff --git a/openair2/UTIL/ASYNC_IF/ringbuffer_queue.h b/openair2/UTIL/ASYNC_IF/ringbuffer_queue.h index 04414cbbb2b9618379ad1284a056943e04539c23..344187fe5c66c3b2558ec6c3f5759ece7e997720 100644 --- a/openair2/UTIL/ASYNC_IF/ringbuffer_queue.h +++ b/openair2/UTIL/ASYNC_IF/ringbuffer_queue.h @@ -47,7 +47,7 @@ typedef struct { message_queue_t * new_message_queue(int size); int message_put(message_queue_t *queue, void *data, int size, int priority); -int message_get(message_queue_t *queue, void **data, int *size, int *priority); +int message_get(message_queue_t *queue, void **data, int *priority); void destroy_message_queue(message_queue_t *queue); #endif /* RINGBUFFER_QUEUE_H */