aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Server
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2025-12-22 13:06:28 +0100
committerShauren <shauren.trinity@gmail.com>2025-12-22 13:06:28 +0100
commitb69a1a71c6b3c604f5eed1d0752f66981a4efc25 (patch)
tree762aefb04270e86b8aa2b6f2d527291baae8b6f5 /src/server/game/Server
parenta4bbb6197002d76d084ced8a0f6fa79ff7bcc922 (diff)
Core/Network: Fix invalid NetworkThread array access for derived classes that have additional data members (only HttpService threads were affected)
Diffstat (limited to 'src/server/game/Server')
-rw-r--r--src/server/game/Server/WorldSocketMgr.cpp23
-rw-r--r--src/server/game/Server/WorldSocketMgr.h14
2 files changed, 20 insertions, 17 deletions
diff --git a/src/server/game/Server/WorldSocketMgr.cpp b/src/server/game/Server/WorldSocketMgr.cpp
index 4205b6912f0..ee2f2f478a2 100644
--- a/src/server/game/Server/WorldSocketMgr.cpp
+++ b/src/server/game/Server/WorldSocketMgr.cpp
@@ -17,24 +17,19 @@
#include "WorldSocketMgr.h"
#include "Config.h"
-#include "NetworkThread.h"
#include "ScriptMgr.h"
#include <boost/system/error_code.hpp>
-class WorldSocketThread : public Trinity::Net::NetworkThread<WorldSocket>
+void WorldSocketThread::SocketAdded(std::shared_ptr<WorldSocket> const& sock)
{
-public:
- void SocketAdded(std::shared_ptr<WorldSocket> const& sock) override
- {
- sock->SetSendBufferSize(sWorldSocketMgr.GetApplicationSendBufferSize());
- sScriptMgr->OnSocketOpen(sock);
- }
+ sock->SetSendBufferSize(sWorldSocketMgr.GetApplicationSendBufferSize());
+ sScriptMgr->OnSocketOpen(sock);
+}
- void SocketRemoved(std::shared_ptr<WorldSocket>const& sock) override
- {
- sScriptMgr->OnSocketClose(sock);
- }
-};
+void WorldSocketThread::SocketRemoved(std::shared_ptr<WorldSocket>const& sock)
+{
+ sScriptMgr->OnSocketClose(sock);
+}
WorldSocketMgr::WorldSocketMgr() : BaseSocketMgr(), _socketSystemSendBufferSize(-1), _socketApplicationSendBufferSize(65536), _tcpNoDelay(true)
{
@@ -114,7 +109,7 @@ void WorldSocketMgr::OnSocketOpen(Trinity::Net::IoContextTcpSocket&& sock, uint3
BaseSocketMgr::OnSocketOpen(std::move(sock), threadIndex);
}
-Trinity::Net::NetworkThread<WorldSocket>* WorldSocketMgr::CreateThreads() const
+WorldSocketThread* WorldSocketMgr::CreateThreads() const
{
return new WorldSocketThread[GetNetworkThreadCount()];
}
diff --git a/src/server/game/Server/WorldSocketMgr.h b/src/server/game/Server/WorldSocketMgr.h
index 9f905f23cd2..f9aa81df768 100644
--- a/src/server/game/Server/WorldSocketMgr.h
+++ b/src/server/game/Server/WorldSocketMgr.h
@@ -21,10 +21,18 @@
#include "SocketMgr.h"
#include "WorldSocket.h"
+class WorldSocketThread final : public Trinity::Net::NetworkThread<WorldSocket>
+{
+public:
+ void SocketAdded(std::shared_ptr<WorldSocket> const& sock) override;
+
+ void SocketRemoved(std::shared_ptr<WorldSocket>const& sock) override;
+};
+
/// Manages all sockets connected to peers and network threads
-class TC_GAME_API WorldSocketMgr : public Trinity::Net::SocketMgr<WorldSocket>
+class TC_GAME_API WorldSocketMgr final : public Trinity::Net::SocketMgr<WorldSocket, WorldSocketThread>
{
- typedef SocketMgr<WorldSocket> BaseSocketMgr;
+ using BaseSocketMgr = SocketMgr;
public:
~WorldSocketMgr();
@@ -44,7 +52,7 @@ public:
protected:
WorldSocketMgr();
- Trinity::Net::NetworkThread<WorldSocket>* CreateThreads() const override;
+ WorldSocketThread* CreateThreads() const override;
private:
int32 _socketSystemSendBufferSize;