Make queue_recv() functions return size, not as out-param
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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 */
|
||||
|
||||
Reference in New Issue
Block a user