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

@@ -8,6 +8,9 @@
#include "PointerQueue.h"
#include "RadioInterface.h"
#include "concurrency/OSThread.h"
#ifdef ARCH_PORTDUINO
#include <mutex>
#endif
/**
* A mesh aware router that supports multiple interfaces.
@@ -19,6 +22,12 @@ class Router : protected concurrency::OSThread, protected PacketHistory
/// forwarded to the phone.
PointerQueue<meshtastic_MeshPacket> fromRadioQueue;
#ifdef ARCH_PORTDUINO
/// linux calls enqueueReceivedMessage from an other thread when receiving UDP packets,
/// to avoid a data race with LoRa, lock that method.
std::mutex queueMutex;
#endif
protected:
RadioInterface *iface = NULL;