aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Server/WorldSession.cpp10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp
index 75da92158d1..c33c12ae5d4 100644
--- a/src/server/game/Server/WorldSession.cpp
+++ b/src/server/game/Server/WorldSession.cpp
@@ -272,6 +272,8 @@ bool WorldSession::Update(uint32 diff, PacketFilter& updater)
//! delayed packets that were re-enqueued due to improper timing. To prevent an infinite
//! loop caused by re-enqueueing the same packets over and over again, we stop updating this session
//! and continue updating others. The re-enqueued packets will be handled in the next Update call for this session.
+ uint32 processedPackets = 0;
+
while (m_Socket && !m_Socket->IsClosed() &&
!_recvQueue.empty() && _recvQueue.peek(true) != firstDelayedPacket &&
_recvQueue.next(packet, updater))
@@ -383,6 +385,14 @@ bool WorldSession::Update(uint32 diff, PacketFilter& updater)
delete packet;
deletePacket = true;
+
+#define MAX_PROCESSED_PACKETS_IN_SAME_WORLDSESSION_UPDATE 100
+ processedPackets++;
+
+ //process only a max amout of packets in 1 Update() call.
+ //Any leftover will be processed in next update
+ if (processedPackets > MAX_PROCESSED_PACKETS_IN_SAME_WORLDSESSION_UPDATE)
+ break;
}
if (m_Socket && !m_Socket->IsClosed() && _warden)