diff options
-rw-r--r-- | src/server/game/Server/WorldSocket.cpp | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/src/server/game/Server/WorldSocket.cpp b/src/server/game/Server/WorldSocket.cpp index 963d6a1b71e..b0c7631f986 100644 --- a/src/server/game/Server/WorldSocket.cpp +++ b/src/server/game/Server/WorldSocket.cpp @@ -832,13 +832,15 @@ void WorldSocket::HandlePing(WorldPacket& recvPacket) if (maxAllowed && _OverSpeedPings > maxAllowed) { - std::lock_guard<std::mutex> sessionGuard(_worldSessionLock); + std::unique_lock<std::mutex> sessionGuard(_worldSessionLock); if (_worldSession && !_worldSession->HasPermission(rbac::RBAC_PERM_SKIP_CHECK_OVERSPEED_PING)) { TC_LOG_ERROR("network", "WorldSocket::HandlePing: %s kicked for over-speed pings (address: %s)", _worldSession->GetPlayerInfo().c_str(), GetRemoteIpAddress().to_string().c_str()); + // this is bad but we will pretend this code isn't here - it only happens once per socket in worst case + sessionGuard.unlock(); CloseSocket(); return; } |