diff options
| author | Shauren <shauren.trinity@gmail.com> | 2025-12-22 13:06:28 +0100 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2025-12-22 13:06:28 +0100 |
| commit | b69a1a71c6b3c604f5eed1d0752f66981a4efc25 (patch) | |
| tree | 762aefb04270e86b8aa2b6f2d527291baae8b6f5 /src/server/game/Server | |
| parent | a4bbb6197002d76d084ced8a0f6fa79ff7bcc922 (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.cpp | 23 | ||||
| -rw-r--r-- | src/server/game/Server/WorldSocketMgr.h | 14 |
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; |
