diff --git a/include/Client.h b/include/Client.h index 27dae43..cbf3748 100644 --- a/include/Client.h +++ b/include/Client.h @@ -58,6 +58,7 @@ public: [[nodiscard]] std::queue& MissedPacketQueue() { return mMissedPacketsDuringSyncing; } [[nodiscard]] const std::queue& 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 mMissedPacketsDuringSyncing; std::set mIdentifiers; bool mIsGuest = false; diff --git a/src/TNetwork.cpp b/src/TNetwork.cpp index c7719c8..28bf5cc 100644 --- a/src/TNetwork.cpp +++ b/src/TNetwork.cpp @@ -338,6 +338,7 @@ std::shared_ptr 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;