1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2026-01-01 01:41:18 +01:00

Merge pull request #21422 from benpicco/suit_worker_trigger

sys/suit: don't block in suit_worker_trigger()
This commit is contained in:
Marian Buschsieweke 2025-04-23 13:46:29 +00:00 committed by GitHub
commit 3bfdaeba87
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 11 additions and 4 deletions

View File

@ -25,6 +25,7 @@
#ifndef SUIT_TRANSPORT_WORKER_H
#define SUIT_TRANSPORT_WORKER_H
#include <stdbool.h>
#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

View File

@ -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)