fix data race issue no.2

This commit is contained in:
Lion Kortlepel 2021-03-30 15:19:11 +02:00
parent e4d6c86919
commit 61726ea3ab

View File

@ -338,15 +338,22 @@ std::shared_ptr<TClient> TNetwork::CreateClient(SOCKET TCPSock) {
bool TNetwork::TCPSend(TClient& c, const std::string& Data, bool IsSync) {
if (!IsSync) {
std::unique_lock Lock(c.MissedPacketQueueMutex());
if (c.IsSyncing()) {
std::unique_lock Lock(c.MissedPacketQueueMutex());
c.EnqueueMissedPacketDuringSyncing(Data);
return true;
} else if (!c.IsSyncing() && c.IsSynced() && c.MissedPacketQueueSize() != 0) {
debug("sending " + std::to_string(c.MissedPacketQueueSize()) + " missed packets");
while (c.MissedPacketQueueSize() > 0) {
std::string QData = c.MissedPacketQueue().front();
c.MissedPacketQueue().pop();
std::string QData {};
{ // 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);
TCPSend(c, QData, true);
}