kernel: msgq: error handling

Add runtime error handling for k_msgq_cleanup. We return 0 on success
now and -EAGAIN when cleanup is not possible.

Signed-off-by: Anas Nashif <anas.nashif@intel.com>
This commit is contained in:
Anas Nashif 2019-06-16 08:43:48 -04:00
parent dfc2bbcd3c
commit 11b9365542
2 changed files with 9 additions and 3 deletions

View file

@ -3698,8 +3698,10 @@ __syscall int k_msgq_alloc_init(struct k_msgq *msgq, size_t msg_size,
*
* @param msgq message queue to cleanup
*
* @retval 0 on success
* @retval -EBUSY Queue not empty
*/
void k_msgq_cleanup(struct k_msgq *msgq);
int k_msgq_cleanup(struct k_msgq *msgq);
/**
* @brief Send a message to a message queue.

View file

@ -23,6 +23,7 @@
#include <init.h>
#include <syscall_handler.h>
#include <kernel_internal.h>
#include <sys/check.h>
#ifdef CONFIG_OBJECT_TRACING
@ -98,14 +99,17 @@ int z_vrfy_k_msgq_alloc_init(struct k_msgq *q, size_t msg_size,
#include <syscalls/k_msgq_alloc_init_mrsh.c>
#endif
void k_msgq_cleanup(struct k_msgq *msgq)
int k_msgq_cleanup(struct k_msgq *msgq)
{
__ASSERT_NO_MSG(z_waitq_head(&msgq->wait_q) == NULL);
CHECKIF(z_waitq_head(&msgq->wait_q) != NULL) {
return -EBUSY;
}
if ((msgq->flags & K_MSGQ_FLAG_ALLOC) != 0) {
k_free(msgq->buffer_start);
msgq->flags &= ~K_MSGQ_FLAG_ALLOC;
}
return 0;
}