From aefa8ab20c8053c9edc17d69fbebd0f0ef32cbae Mon Sep 17 00:00:00 2001 From: Benjamin Valentin Date: Tue, 22 Apr 2025 20:01:39 +0200 Subject: [PATCH] sys/suit: don't block in suit_worker_trigger() --- sys/include/suit/transport/worker.h | 6 +++++- sys/suit/transport/worker.c | 9 ++++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/sys/include/suit/transport/worker.h b/sys/include/suit/transport/worker.h index 6bb848e907..c2c58f23cb 100644 --- a/sys/include/suit/transport/worker.h +++ b/sys/include/suit/transport/worker.h @@ -25,6 +25,7 @@ #ifndef SUIT_TRANSPORT_WORKER_H #define SUIT_TRANSPORT_WORKER_H +#include #if MODULE_NANOCOAP # include "net/nanocoap.h" #endif @@ -38,8 +39,11 @@ extern "C" { * * @param[in] url url pointer containing the full coap url to the manifest * @param[in] len length of the url + * + * @retval true if the worker was triggered + * @retval false if the worker is already busy */ -void suit_worker_trigger(const char *url, size_t len); +bool suit_worker_trigger(const char *url, size_t len); /** * @brief Trigger a SUIT update via a worker thread diff --git a/sys/suit/transport/worker.c b/sys/suit/transport/worker.c index 79ca4c4db8..a565031678 100644 --- a/sys/suit/transport/worker.c +++ b/sys/suit/transport/worker.c @@ -207,11 +207,13 @@ static bool _worker_reap(void) return true; } -void suit_worker_trigger(const char *url, size_t len) +bool suit_worker_trigger(const char *url, size_t len) { - mutex_lock(&_worker_lock); + if (!mutex_trylock(&_worker_lock)) { + return false; + } if (!_worker_reap()) { - return; + return false; } assert(len != 0); /* A zero-length URI is invalid, but _url[0] == '\0' is @@ -222,6 +224,7 @@ void suit_worker_trigger(const char *url, size_t len) _worker_pid = thread_create(_stack, SUIT_WORKER_STACKSIZE, SUIT_COAP_WORKER_PRIO, 0, _suit_worker_thread, NULL, "suit worker"); + return true; } void suit_worker_trigger_prepared(const uint8_t *buffer, size_t size)