From c60f418ddcbb839b83d2856ba1dd94fda9b896e7 Mon Sep 17 00:00:00 2001 From: Bryan Biedenkapp Date: Wed, 14 Aug 2024 11:06:49 -0400 Subject: [PATCH] correct issue with thread-safety when writing network queues for bridge; --- src/bridge/HostBridge.cpp | 6 ++++++ src/bridge/HostBridge.h | 1 + 2 files changed, 7 insertions(+) diff --git a/src/bridge/HostBridge.cpp b/src/bridge/HostBridge.cpp index b003373a..b19daccd 100644 --- a/src/bridge/HostBridge.cpp +++ b/src/bridge/HostBridge.cpp @@ -60,6 +60,7 @@ const int NUMBER_OF_BUFFERS = 32; // --------------------------------------------------------------------------- std::mutex HostBridge::m_audioMutex; +std::mutex HostBridge::m_networkMutex; // --------------------------------------------------------------------------- // Global Functions @@ -489,7 +490,10 @@ int HostBridge::run() // ------------------------------------------------------ if (m_network != nullptr) + { + std::lock_guard lock(HostBridge::m_networkMutex); m_network->clock(ms); + } if (m_udpAudio && m_udpAudioSocket != nullptr) processUDPAudio(); @@ -2278,6 +2282,7 @@ void* HostBridge::threadNetworkProcess(void* arg) uint32_t length = 0U; bool netReadRet = false; if (bridge->m_txMode == TX_MODE_DMR) { + std::lock_guard lock(HostBridge::m_networkMutex); UInt8Array dmrBuffer = bridge->m_network->readDMR(netReadRet, length); if (netReadRet) { bridge->processDMRNetwork(dmrBuffer.get(), length); @@ -2285,6 +2290,7 @@ void* HostBridge::threadNetworkProcess(void* arg) } if (bridge->m_txMode == TX_MODE_P25) { + std::lock_guard lock(HostBridge::m_networkMutex); UInt8Array p25Buffer = bridge->m_network->readP25(netReadRet, length); if (netReadRet) { bridge->processP25Network(p25Buffer.get(), length); diff --git a/src/bridge/HostBridge.h b/src/bridge/HostBridge.h index cc0786a2..896b4eb5 100644 --- a/src/bridge/HostBridge.h +++ b/src/bridge/HostBridge.h @@ -214,6 +214,7 @@ private: bool m_debug; static std::mutex m_audioMutex; + static std::mutex m_networkMutex; #if defined(_WIN32) void* m_decoderState;