fix race condition in packet queueing

This commit is contained in:
Lion Kortlepel 2021-03-30 15:13:32 +02:00
parent eaa6b5322f
commit e4d6c86919
2 changed files with 3 additions and 1 deletions

View File

@ -58,6 +58,7 @@ public:
[[nodiscard]] std::queue<std::string>& MissedPacketQueue() { return mMissedPacketsDuringSyncing; }
[[nodiscard]] const std::queue<std::string>& MissedPacketQueue() const { return mMissedPacketsDuringSyncing; }
[[nodiscard]] size_t MissedPacketQueueSize() const { return mMissedPacketsDuringSyncing.size(); }
[[nodiscard]] std::mutex& MissedPacketQueueMutex() const { return mMissedPacketsMutex; }
void SetIsConnected(bool NewIsConnected) { mIsConnected = NewIsConnected; }
[[nodiscard]] TServer& Server() const;
void UpdatePingTime();
@ -68,7 +69,7 @@ private:
bool mIsConnected = false;
bool mIsSynced = false;
bool mIsSyncing = false;
std::mutex mMissedPacketsMutex;
mutable std::mutex mMissedPacketsMutex;
std::queue<std::string> mMissedPacketsDuringSyncing;
std::set<std::string> mIdentifiers;
bool mIsGuest = false;

View File

@ -338,6 +338,7 @@ 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()) {
c.EnqueueMissedPacketDuringSyncing(Data);
return true;