diff --git a/src/common/network/FrameQueue.cpp b/src/common/network/FrameQueue.cpp index c1daca3c..3c855629 100644 --- a/src/common/network/FrameQueue.cpp +++ b/src/common/network/FrameQueue.cpp @@ -4,7 +4,7 @@ * GPLv2 Open Source. Use is subject to license terms. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright (C) 2023,2024 Bryan Biedenkapp, N2PLL + * Copyright (C) 2023,2024,2025 Bryan Biedenkapp, N2PLL * */ #include "Defines.h" @@ -23,6 +23,12 @@ using namespace network::frame; #include #include +// --------------------------------------------------------------------------- +// Static Class Members +// --------------------------------------------------------------------------- + +std::mutex FrameQueue::m_fqTimestampLock; + // --------------------------------------------------------------------------- // Public Class Members // --------------------------------------------------------------------------- @@ -170,6 +176,7 @@ void FrameQueue::enqueueMessage(const uint8_t* message, uint32_t length, uint32_ void FrameQueue::clearTimestamps() { + std::lock_guard lock(m_fqTimestampLock); m_streamTimestamps.clear(); } @@ -187,6 +194,7 @@ uint8_t* FrameQueue::generateMessage(const uint8_t* message, uint32_t length, ui uint32_t timestamp = INVALID_TS; if (streamId != 0U) { + std::lock_guard lock(m_fqTimestampLock); auto entry = m_streamTimestamps.find(streamId); if (entry != m_streamTimestamps.end()) { timestamp = entry->second; @@ -221,6 +229,7 @@ uint8_t* FrameQueue::generateMessage(const uint8_t* message, uint32_t length, ui } if (streamId != 0U && rtpSeq == RTP_END_OF_CALL_SEQ) { + std::lock_guard lock(m_fqTimestampLock); auto entry = m_streamTimestamps.find(streamId); if (entry != m_streamTimestamps.end()) { if (m_debug) diff --git a/src/common/network/FrameQueue.h b/src/common/network/FrameQueue.h index 3a23ff43..413c69d9 100644 --- a/src/common/network/FrameQueue.h +++ b/src/common/network/FrameQueue.h @@ -4,7 +4,7 @@ * GPLv2 Open Source. Use is subject to license terms. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright (C) 2023,2024 Bryan Biedenkapp, N2PLL + * Copyright (C) 2023,2024,2025 Bryan Biedenkapp, N2PLL * */ /** @@ -21,6 +21,7 @@ #include "common/network/RTPFNEHeader.h" #include "common/network/RawFrameQueue.h" +#include #include namespace network @@ -116,6 +117,7 @@ namespace network private: uint32_t m_peerId; std::unordered_map m_streamTimestamps; + static std::mutex m_fqTimestampLock; /** * @brief Generate RTP message for the frame queue.