From 53482f729995889936ad8fba9fc5789d9cdba85a Mon Sep 17 00:00:00 2001 From: Shauren Date: Sat, 24 Oct 2020 17:37:24 +0200 Subject: Core/DBLayer: Fixed memory leaks with existing SQLQueryHolder uses and eliminated the possibilty of adding more in future (replaced manual memory management with smart pointers) --- src/server/database/Database/QueryHolder.h | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) (limited to 'src/server/database/Database/QueryHolder.h') diff --git a/src/server/database/Database/QueryHolder.h b/src/server/database/Database/QueryHolder.h index f94eff49d2c..25687fedd81 100644 --- a/src/server/database/Database/QueryHolder.h +++ b/src/server/database/Database/QueryHolder.h @@ -19,6 +19,7 @@ #define _QUERYHOLDER_H #include "SQLOperation.h" +#include class TC_DATABASE_API SQLQueryHolderBase { @@ -26,10 +27,10 @@ class TC_DATABASE_API SQLQueryHolderBase private: std::vector> m_queries; public: - SQLQueryHolderBase() { } + SQLQueryHolderBase() = default; virtual ~SQLQueryHolderBase(); void SetSize(size_t size); - PreparedQueryResult GetPreparedResult(size_t index); + PreparedQueryResult GetPreparedResult(size_t index) const; void SetPreparedResult(size_t index, PreparedResultSet* result); protected: @@ -49,13 +50,12 @@ public: class TC_DATABASE_API SQLQueryHolderTask : public SQLOperation { private: - SQLQueryHolderBase* m_holder; + std::shared_ptr m_holder; QueryResultHolderPromise m_result; - bool m_executed; public: - SQLQueryHolderTask(SQLQueryHolderBase* holder) - : m_holder(holder), m_executed(false) { } + explicit SQLQueryHolderTask(std::shared_ptr holder) + : m_holder(std::move(holder)) { } ~SQLQueryHolderTask(); @@ -66,20 +66,23 @@ class TC_DATABASE_API SQLQueryHolderTask : public SQLOperation class TC_DATABASE_API SQLQueryHolderCallback { public: - SQLQueryHolderCallback(QueryResultHolderFuture&& future) : m_future(std::move(future)) { } + SQLQueryHolderCallback(std::shared_ptr&& holder, QueryResultHolderFuture&& future) + : m_holder(std::move(holder)), m_future(std::move(future)) { } + SQLQueryHolderCallback(SQLQueryHolderCallback&&) = default; SQLQueryHolderCallback& operator=(SQLQueryHolderCallback&&) = default; - void AfterComplete(std::function callback) & + void AfterComplete(std::function callback) & { m_callback = std::move(callback); } bool InvokeIfReady(); + std::shared_ptr m_holder; QueryResultHolderFuture m_future; - std::function m_callback; + std::function m_callback; }; #endif -- cgit v1.2.3