From b7c6282767d296b4764489370761cef85d545805 Mon Sep 17 00:00:00 2001 From: Bryan Biedenkapp Date: Sat, 17 Feb 2024 15:45:44 -0500 Subject: [PATCH] fix for possible race condition (that shouldn't have happened in the first place), if writeMaster is being used in queueOnly = false, do an immediate network socket write without attempting to enqueue a message; --- src/common/network/BaseNetwork.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/common/network/BaseNetwork.cpp b/src/common/network/BaseNetwork.cpp index bec1b0f4..32304bbc 100644 --- a/src/common/network/BaseNetwork.cpp +++ b/src/common/network/BaseNetwork.cpp @@ -327,16 +327,20 @@ bool BaseNetwork::writeMaster(FrameQueue::OpcodePair opcode, const uint8_t* data uint16_t port = udp::Socket::port(m_addr) + 1U; if (udp::Socket::lookup(address, port, addr, addrLen) == 0) { - m_frameQueue->enqueueMessage(data, length, streamId, m_peerId, opcode, pktSeq, addr, addrLen); + if (!queueOnly) + return m_frameQueue->write(data, length, streamId, m_peerId, m_peerId, opcode, pktSeq, addr, addrLen); + else + m_frameQueue->enqueueMessage(data, length, streamId, m_peerId, opcode, pktSeq, addr, addrLen); } } else { - m_frameQueue->enqueueMessage(data, length, streamId, m_peerId, opcode, pktSeq, m_addr, m_addrLen); + if (!queueOnly) + return m_frameQueue->write(data, length, streamId, m_peerId, m_peerId, opcode, pktSeq, m_addr, m_addrLen); + else + m_frameQueue->enqueueMessage(data, length, streamId, m_peerId, opcode, pktSeq, m_addr, m_addrLen); } - if (queueOnly) - return true; - return m_frameQueue->flushQueue(); + return true; } ///