From 8e3024a96ab06b5e2d6da529c5e3db9ce5744c4e Mon Sep 17 00:00:00 2001 From: Shauren Date: Tue, 30 Apr 2024 00:20:38 +0200 Subject: Core/Misc: Refactor loading process to remove exit() calls that cause deadlocks because threads are terminated without proper cleanup --- src/server/worldserver/Main.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'src/server/worldserver/Main.cpp') diff --git a/src/server/worldserver/Main.cpp b/src/server/worldserver/Main.cpp index 1aa1de63d02..f8eba01c60c 100644 --- a/src/server/worldserver/Main.cpp +++ b/src/server/worldserver/Main.cpp @@ -338,7 +338,8 @@ extern int main(int argc, char** argv) // Initialize the World sSecretMgr->Initialize(SECRET_OWNER_WORLDSERVER); - sWorld->SetInitialWorldSettings(); + if (!sWorld->SetInitialWorldSettings()) + return 1; auto mapManagementHandle = Trinity::make_unique_ptr_with_deleter(&dummy, [](void*) { @@ -359,7 +360,12 @@ extern int main(int argc, char** argv) // Start soap serving thread if enabled std::unique_ptr soapThread; if (sConfigMgr->GetBoolDefault("SOAP.Enabled", false)) - soapThread.reset(new std::thread(TCSoapThread, sConfigMgr->GetStringDefault("SOAP.IP", "127.0.0.1"), uint16(sConfigMgr->GetIntDefault("SOAP.Port", 7878)))); + { + if (std::thread* soap = CreateSoapThread(sConfigMgr->GetStringDefault("SOAP.IP", "127.0.0.1"), uint16(sConfigMgr->GetIntDefault("SOAP.Port", 7878)))) + soapThread.reset(soap); + else + return -1; + } // Launch the worldserver listener socket uint16 worldPort = uint16(sWorld->getIntConfig(CONFIG_PORT_WORLD)); -- cgit v1.2.3