Make queue_recv() functions return size, not as out-param

This commit is contained in:
Robert Schmidt
2019-01-29 16:55:15 +01:00
parent 63c4a90eb7
commit 0643d6b561
15 changed files with 36 additions and 33 deletions
+3 -3
View File
@@ -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);
+8 -7
View File
@@ -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);
+1 -1
View File
@@ -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
+6 -4
View File
@@ -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) {
+1 -1
View File
@@ -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 */