aboutsummaryrefslogtreecommitdiff
path: root/src/server
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2020-05-29 18:17:24 +0200
committerGitHub <noreply@github.com>2020-05-29 18:17:24 +0200
commitf0060496f9c8c4a21c28552a95928f2d05e031a9 (patch)
tree5bf9223139d78b53e92dc1d020c05095f1c8f8a0 /src/server
parent0ba62a45e5c60efd37a0b2c7534b44c3a3fc151e (diff)
Core/Networking: Switch to intrusive variant of MPSC queue to halve the number of memory allocations for packet sending (#24659)
Diffstat (limited to 'src/server')
-rw-r--r--src/server/game/Server/WorldSocket.cpp11
-rw-r--r--src/server/game/Server/WorldSocket.h18
2 files changed, 16 insertions, 13 deletions
diff --git a/src/server/game/Server/WorldSocket.cpp b/src/server/game/Server/WorldSocket.cpp
index 17363de5eb8..0e65704076d 100644
--- a/src/server/game/Server/WorldSocket.cpp
+++ b/src/server/game/Server/WorldSocket.cpp
@@ -31,17 +31,6 @@
#include "WorldSession.h"
#include <memory>
-class EncryptablePacket : public WorldPacket
-{
-public:
- EncryptablePacket(WorldPacket const& packet, bool encrypt) : WorldPacket(packet), _encrypt(encrypt) { }
-
- bool NeedsEncryption() const { return _encrypt; }
-
-private:
- bool _encrypt;
-};
-
using boost::asio::ip::tcp;
WorldSocket::WorldSocket(tcp::socket&& socket)
diff --git a/src/server/game/Server/WorldSocket.h b/src/server/game/Server/WorldSocket.h
index 8bf230e8005..6f6b0848423 100644
--- a/src/server/game/Server/WorldSocket.h
+++ b/src/server/game/Server/WorldSocket.h
@@ -30,7 +30,21 @@
#include <boost/asio/ip/tcp.hpp>
using boost::asio::ip::tcp;
-class EncryptablePacket;
+class EncryptablePacket : public WorldPacket
+{
+public:
+ EncryptablePacket(WorldPacket const& packet, bool encrypt) : WorldPacket(packet), _encrypt(encrypt)
+ {
+ SocketQueueLink.store(nullptr, std::memory_order_relaxed);
+ }
+
+ bool NeedsEncryption() const { return _encrypt; }
+
+ std::atomic<EncryptablePacket*> SocketQueueLink;
+
+private:
+ bool _encrypt;
+};
namespace WorldPackets
{
@@ -110,7 +124,7 @@ private:
MessageBuffer _headerBuffer;
MessageBuffer _packetBuffer;
- MPSCQueue<EncryptablePacket> _bufferQueue;
+ MPSCQueue<EncryptablePacket, &EncryptablePacket::SocketQueueLink> _bufferQueue;
std::size_t _sendBufferSize;
QueryCallbackProcessor _queryProcessor;