router: on linux add a mutex around the queue (#6709)

UDP reception happens on an other thread, avoid data races and potential data corruption issues.
This commit is contained in:
Jorropo
2025-05-01 13:32:20 +02:00
committed by GitHub
parent a8ab6e82e6
commit 987623567a
2 changed files with 17 additions and 0 deletions

View File

@@ -64,6 +64,10 @@ Router::Router() : concurrency::OSThread("Router"), fromRadioQueue(MAX_RX_FROMRA
*/
int32_t Router::runOnce()
{
#ifdef ARCH_PORTDUINO
const std::lock_guard<std::mutex> lock(queueMutex);
#endif
meshtastic_MeshPacket *mp;
while ((mp = fromRadioQueue.dequeuePtr(0)) != NULL) {
// printPacket("handle fromRadioQ", mp);
@@ -80,6 +84,10 @@ int32_t Router::runOnce()
*/
void Router::enqueueReceivedMessage(meshtastic_MeshPacket *p)
{
#ifdef ARCH_PORTDUINO
const std::lock_guard<std::mutex> lock(queueMutex);
#endif
// Try enqueue until successful
while (!fromRadioQueue.enqueue(p, 0)) {
meshtastic_MeshPacket *old_p;