From e5bf7ab086b51601985f2bbcafa62beee23be166 Mon Sep 17 00:00:00 2001 From: Shauren Date: Thu, 21 Dec 2023 00:04:14 +0100 Subject: Core/Database: Fixed worldserver hanging if opening a connection to database failed (cherry picked from commit b130995814ef5bc7fc445d271d4f9521930755d3) --- .../database/Database/DatabaseWorkerPool.cpp | 35 ++++++++-------------- 1 file changed, 13 insertions(+), 22 deletions(-) (limited to 'src/server/database/Database') diff --git a/src/server/database/Database/DatabaseWorkerPool.cpp b/src/server/database/Database/DatabaseWorkerPool.cpp index 9cc4f755d9d..8ae38d7e226 100644 --- a/src/server/database/Database/DatabaseWorkerPool.cpp +++ b/src/server/database/Database/DatabaseWorkerPool.cpp @@ -149,14 +149,17 @@ uint32 DatabaseWorkerPool::Open() error = OpenConnections(IDX_SYNCH, _synch_threads); - if (!error) - { - TC_LOG_INFO("sql.driver", "DatabasePool '{}' opened successfully. " - "{} total connections running.", GetDatabaseName(), - (_connections[IDX_SYNCH].size() + _connections[IDX_ASYNC].size())); - } + if (error) + return error; + + for (std::unique_ptr const& connection : _connections[IDX_ASYNC]) + connection->StartWorkerThread(_ioContext.get()); + + TC_LOG_INFO("sql.driver", "DatabasePool '{}' opened successfully. " + "{} total connections running.", GetDatabaseName(), + (_connections[IDX_SYNCH].size() + _connections[IDX_ASYNC].size())); - return error; + return 0; } template @@ -428,21 +431,9 @@ uint32 DatabaseWorkerPool::OpenConnections(InternalIndex type, uint8 numConne for (uint8 i = 0; i < numConnections; ++i) { // Create the connection - auto connection = [&] { - switch (type) - { - case IDX_ASYNC: - { - auto c = std::make_unique(*_connectionInfo, CONNECTION_ASYNC); - c->StartWorkerThread(_ioContext.get()); - return c; - } - case IDX_SYNCH: - return std::make_unique(*_connectionInfo, CONNECTION_SYNCH); - default: - ABORT(); - } - }(); + constexpr std::array flags = { { CONNECTION_ASYNC, CONNECTION_SYNCH } }; + + std::unique_ptr connection = std::make_unique(*_connectionInfo, flags[type]); if (uint32 error = connection->Open()) { -- cgit v1.2.3