aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2014-08-16 01:43:42 +0200
committerShauren <shauren.trinity@gmail.com>2014-08-16 01:43:42 +0200
commit7cb72c2aacbb3c2502bd5d25a52a6e96fe2b9cc8 (patch)
treebc405c86c8c6bc38cb11fdfd84eed61d1f781bbc
parent5c60976046e819f6b2d5d24b589945535ae5042c (diff)
Core/DBLayer: Fixed an incredibly rare memory leak happening when player started loading from database and never finished
-rw-r--r--src/server/shared/Database/QueryHolder.cpp8
-rw-r--r--src/server/shared/Database/QueryHolder.h8
2 files changed, 13 insertions, 3 deletions
diff --git a/src/server/shared/Database/QueryHolder.cpp b/src/server/shared/Database/QueryHolder.cpp
index bd938561b50..f0dc3c96e4e 100644
--- a/src/server/shared/Database/QueryHolder.cpp
+++ b/src/server/shared/Database/QueryHolder.cpp
@@ -166,8 +166,16 @@ void SQLQueryHolder::SetSize(size_t size)
m_queries.resize(size);
}
+SQLQueryHolderTask::~SQLQueryHolderTask()
+{
+ if (!m_executed)
+ delete m_holder;
+}
+
bool SQLQueryHolderTask::Execute()
{
+ m_executed = true;
+
if (!m_holder)
return false;
diff --git a/src/server/shared/Database/QueryHolder.h b/src/server/shared/Database/QueryHolder.h
index 273980c3ac5..39e51b591c5 100644
--- a/src/server/shared/Database/QueryHolder.h
+++ b/src/server/shared/Database/QueryHolder.h
@@ -47,14 +47,16 @@ class SQLQueryHolderTask : public SQLOperation
private:
SQLQueryHolder* m_holder;
QueryResultHolderPromise m_result;
+ bool m_executed;
public:
SQLQueryHolderTask(SQLQueryHolder* holder)
- : m_holder(holder) { };
+ : m_holder(holder), m_executed(false) { }
+
+ ~SQLQueryHolderTask();
bool Execute() override;
QueryResultHolderFuture GetFuture() { return m_result.get_future(); }
-
};
-#endif \ No newline at end of file
+#endif