mirror of
https://github.com/BeamMP/BeamMP-Server.git
synced 2026-04-18 22:30:03 +00:00
fix data race issue no.2
This commit is contained in:
@@ -338,15 +338,22 @@ std::shared_ptr<TClient> TNetwork::CreateClient(SOCKET TCPSock) {
|
|||||||
|
|
||||||
bool TNetwork::TCPSend(TClient& c, const std::string& Data, bool IsSync) {
|
bool TNetwork::TCPSend(TClient& c, const std::string& Data, bool IsSync) {
|
||||||
if (!IsSync) {
|
if (!IsSync) {
|
||||||
std::unique_lock Lock(c.MissedPacketQueueMutex());
|
|
||||||
if (c.IsSyncing()) {
|
if (c.IsSyncing()) {
|
||||||
|
std::unique_lock Lock(c.MissedPacketQueueMutex());
|
||||||
c.EnqueueMissedPacketDuringSyncing(Data);
|
c.EnqueueMissedPacketDuringSyncing(Data);
|
||||||
return true;
|
return true;
|
||||||
} else if (!c.IsSyncing() && c.IsSynced() && c.MissedPacketQueueSize() != 0) {
|
} else if (!c.IsSyncing() && c.IsSynced() && c.MissedPacketQueueSize() != 0) {
|
||||||
debug("sending " + std::to_string(c.MissedPacketQueueSize()) + " missed packets");
|
debug("sending " + std::to_string(c.MissedPacketQueueSize()) + " missed packets");
|
||||||
while (c.MissedPacketQueueSize() > 0) {
|
while (c.MissedPacketQueueSize() > 0) {
|
||||||
std::string QData = c.MissedPacketQueue().front();
|
std::string QData {};
|
||||||
c.MissedPacketQueue().pop();
|
{ // locked context
|
||||||
|
std::unique_lock lock(c.MissedPacketQueueMutex());
|
||||||
|
if (c.MissedPacketQueueSize() <= 0) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
QData = c.MissedPacketQueue().front();
|
||||||
|
c.MissedPacketQueue().pop();
|
||||||
|
} // end locked context
|
||||||
// debug("sending a missed packet: " + QData);
|
// debug("sending a missed packet: " + QData);
|
||||||
TCPSend(c, QData, true);
|
TCPSend(c, QData, true);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user