diff options
author | Naios <naios-dev@live.de> | 2016-03-02 00:47:49 +0100 |
---|---|---|
committer | Naios <naios-dev@live.de> | 2016-03-03 01:06:13 +0100 |
commit | 7d3cffc297b6a1e24faf64a19b5167609ad8abbf (patch) | |
tree | eed818a0dc881ee95eff2fdc3206e2de1f09d722 /src/server/database/Database/DatabaseLoader.h | |
parent | 472e78d682cb5d5abf4d60111f238744c07096ac (diff) |
Core/Database: Close the databases correctly when the DBUpdater fails
* Also fixes a memory leak spotted by Aokromes
Diffstat (limited to 'src/server/database/Database/DatabaseLoader.h')
-rw-r--r-- | src/server/database/Database/DatabaseLoader.h | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/src/server/database/Database/DatabaseLoader.h b/src/server/database/Database/DatabaseLoader.h index da92cf85a9f..ec390a427ad 100644 --- a/src/server/database/Database/DatabaseLoader.h +++ b/src/server/database/Database/DatabaseLoader.h @@ -21,8 +21,9 @@ #include "DatabaseWorkerPool.h" #include "DatabaseEnv.h" -#include <stack> #include <functional> +#include <stack> +#include <queue> // A helper class to initiate all database worker pools, // handles updating, delays preparing of statements and cleans up on failure. @@ -56,16 +57,18 @@ private: bool PrepareStatements(); using Predicate = std::function<bool()>; + using Closer = std::function<void()>; - static bool Process(std::stack<Predicate>& stack); + // Invokes all functions in the given queue and closes the databases on errors. + // Returns false when there was an error. + bool Process(std::queue<Predicate>& queue); std::string const _logger; bool const _autoSetup; uint32 const _updateFlags; - std::stack<std::pair<Predicate, std::function<void()>>> _open; - std::stack<std::function<void()>> _close; - std::stack<Predicate> _populate, _update, _prepare; + std::queue<Predicate> _open, _populate, _update, _prepare; + std::stack<Closer> _close; }; #endif // DatabaseLoader_h__ |