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:
parent
dfc2bbcd3c
commit
11b9365542
|
@ -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.
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue