From d9cb0702158fd045285f2c0a904cb31a45a3864a Mon Sep 17 00:00:00 2001 From: Anubisss Date: Sat, 23 Jan 2010 14:45:58 +0100 Subject: Implement QueryResult_AutoPtr type which is ACE's reference counted auto_ptr(ACE_Refcounted_Auto_Ptr) for QueryResult pointers. Use this auto_ptr for every DB queries(except QueryNamedResult yet). This patch guarantees NO memory leaks from QueryResult pointers. Thanks to raczman for the idea and for the helping to make this patch. --HG-- branch : trunk --- src/shared/Database/DatabaseImpl.h | 48 +++++++++++++++++++------------------- 1 file changed, 24 insertions(+), 24 deletions(-) (limited to 'src/shared/Database/DatabaseImpl.h') diff --git a/src/shared/Database/DatabaseImpl.h b/src/shared/Database/DatabaseImpl.h index 01ee52065fa..d77b16c8ea6 100644 --- a/src/shared/Database/DatabaseImpl.h +++ b/src/shared/Database/DatabaseImpl.h @@ -68,7 +68,7 @@ template bool -Database::AsyncQuery(Class *object, void (Class::*method)(QueryResult*), const char *sql) +Database::AsyncQuery(Class *object, void (Class::*method)(QueryResult_AutoPtr), const char *sql) { ASYNC_QUERY_BODY(sql, itr) return m_threadBody->Delay(new SqlQuery(sql, new Trinity::QueryCallback(object, method), itr->second)); @@ -76,59 +76,59 @@ Database::AsyncQuery(Class *object, void (Class::*method)(QueryResult*), const c template bool -Database::AsyncQuery(Class *object, void (Class::*method)(QueryResult*, ParamType1), ParamType1 param1, const char *sql) +Database::AsyncQuery(Class *object, void (Class::*method)(QueryResult_AutoPtr, ParamType1), ParamType1 param1, const char *sql) { ASYNC_QUERY_BODY(sql, itr) - return m_threadBody->Delay(new SqlQuery(sql, new Trinity::QueryCallback(object, method, (QueryResult*)NULL, param1), itr->second)); + return m_threadBody->Delay(new SqlQuery(sql, new Trinity::QueryCallback(object, method, (QueryResult_AutoPtr)NULL, param1), itr->second)); } template bool -Database::AsyncQuery(Class *object, void (Class::*method)(QueryResult*, ParamType1, ParamType2), ParamType1 param1, ParamType2 param2, const char *sql) +Database::AsyncQuery(Class *object, void (Class::*method)(QueryResult_AutoPtr, ParamType1, ParamType2), ParamType1 param1, ParamType2 param2, const char *sql) { ASYNC_QUERY_BODY(sql, itr) - return m_threadBody->Delay(new SqlQuery(sql, new Trinity::QueryCallback(object, method, (QueryResult*)NULL, param1, param2), itr->second)); + return m_threadBody->Delay(new SqlQuery(sql, new Trinity::QueryCallback(object, method, (QueryResult_AutoPtr)NULL, param1, param2), itr->second)); } template bool -Database::AsyncQuery(Class *object, void (Class::*method)(QueryResult*, ParamType1, ParamType2, ParamType3), ParamType1 param1, ParamType2 param2, ParamType3 param3, const char *sql) +Database::AsyncQuery(Class *object, void (Class::*method)(QueryResult_AutoPtr, ParamType1, ParamType2, ParamType3), ParamType1 param1, ParamType2 param2, ParamType3 param3, const char *sql) { ASYNC_QUERY_BODY(sql, itr) - return m_threadBody->Delay(new SqlQuery(sql, new Trinity::QueryCallback(object, method, (QueryResult*)NULL, param1, param2, param3), itr->second)); + return m_threadBody->Delay(new SqlQuery(sql, new Trinity::QueryCallback(object, method, (QueryResult_AutoPtr)NULL, param1, param2, param3), itr->second)); } // -- Query / static -- template bool -Database::AsyncQuery(void (*method)(QueryResult*, ParamType1), ParamType1 param1, const char *sql) +Database::AsyncQuery(void (*method)(QueryResult_AutoPtr, ParamType1), ParamType1 param1, const char *sql) { ASYNC_QUERY_BODY(sql, itr) - return m_threadBody->Delay(new SqlQuery(sql, new Trinity::SQueryCallback(method, (QueryResult*)NULL, param1), itr->second)); + return m_threadBody->Delay(new SqlQuery(sql, new Trinity::SQueryCallback(method, (QueryResult_AutoPtr)NULL, param1), itr->second)); } template bool -Database::AsyncQuery(void (*method)(QueryResult*, ParamType1, ParamType2), ParamType1 param1, ParamType2 param2, const char *sql) +Database::AsyncQuery(void (*method)(QueryResult_AutoPtr, ParamType1, ParamType2), ParamType1 param1, ParamType2 param2, const char *sql) { ASYNC_QUERY_BODY(sql, itr) - return m_threadBody->Delay(new SqlQuery(sql, new Trinity::SQueryCallback(method, (QueryResult*)NULL, param1, param2), itr->second)); + return m_threadBody->Delay(new SqlQuery(sql, new Trinity::SQueryCallback(method, (QueryResult_AutoPtr)NULL, param1, param2), itr->second)); } template bool -Database::AsyncQuery(void (*method)(QueryResult*, ParamType1, ParamType2, ParamType3), ParamType1 param1, ParamType2 param2, ParamType3 param3, const char *sql) +Database::AsyncQuery(void (*method)(QueryResult_AutoPtr, ParamType1, ParamType2, ParamType3), ParamType1 param1, ParamType2 param2, ParamType3 param3, const char *sql) { ASYNC_QUERY_BODY(sql, itr) - return m_threadBody->Delay(new SqlQuery(sql, new Trinity::SQueryCallback(method, (QueryResult*)NULL, param1, param2, param3), itr->second)); + return m_threadBody->Delay(new SqlQuery(sql, new Trinity::SQueryCallback(method, (QueryResult_AutoPtr)NULL, param1, param2, param3), itr->second)); } // -- PQuery / member -- template bool -Database::AsyncPQuery(Class *object, void (Class::*method)(QueryResult*), const char *format,...) +Database::AsyncPQuery(Class *object, void (Class::*method)(QueryResult_AutoPtr), const char *format,...) { ASYNC_PQUERY_BODY(format, szQuery) return AsyncQuery(object, method, szQuery); @@ -136,7 +136,7 @@ Database::AsyncPQuery(Class *object, void (Class::*method)(QueryResult*), const template bool -Database::AsyncPQuery(Class *object, void (Class::*method)(QueryResult*, ParamType1), ParamType1 param1, const char *format,...) +Database::AsyncPQuery(Class *object, void (Class::*method)(QueryResult_AutoPtr, ParamType1), ParamType1 param1, const char *format,...) { ASYNC_PQUERY_BODY(format, szQuery) return AsyncQuery(object, method, param1, szQuery); @@ -144,7 +144,7 @@ Database::AsyncPQuery(Class *object, void (Class::*method)(QueryResult*, ParamTy template bool -Database::AsyncPQuery(Class *object, void (Class::*method)(QueryResult*, ParamType1, ParamType2), ParamType1 param1, ParamType2 param2, const char *format,...) +Database::AsyncPQuery(Class *object, void (Class::*method)(QueryResult_AutoPtr, ParamType1, ParamType2), ParamType1 param1, ParamType2 param2, const char *format,...) { ASYNC_PQUERY_BODY(format, szQuery) return AsyncQuery(object, method, param1, param2, szQuery); @@ -152,7 +152,7 @@ Database::AsyncPQuery(Class *object, void (Class::*method)(QueryResult*, ParamTy template bool -Database::AsyncPQuery(Class *object, void (Class::*method)(QueryResult*, ParamType1, ParamType2, ParamType3), ParamType1 param1, ParamType2 param2, ParamType3 param3, const char *format,...) +Database::AsyncPQuery(Class *object, void (Class::*method)(QueryResult_AutoPtr, ParamType1, ParamType2, ParamType3), ParamType1 param1, ParamType2 param2, ParamType3 param3, const char *format,...) { ASYNC_PQUERY_BODY(format, szQuery) return AsyncQuery(object, method, param1, param2, param3, szQuery); @@ -162,7 +162,7 @@ Database::AsyncPQuery(Class *object, void (Class::*method)(QueryResult*, ParamTy template bool -Database::AsyncPQuery(void (*method)(QueryResult*, ParamType1), ParamType1 param1, const char *format,...) +Database::AsyncPQuery(void (*method)(QueryResult_AutoPtr, ParamType1), ParamType1 param1, const char *format,...) { ASYNC_PQUERY_BODY(format, szQuery) return AsyncQuery(method, param1, szQuery); @@ -170,7 +170,7 @@ Database::AsyncPQuery(void (*method)(QueryResult*, ParamType1), ParamType1 param template bool -Database::AsyncPQuery(void (*method)(QueryResult*, ParamType1, ParamType2), ParamType1 param1, ParamType2 param2, const char *format,...) +Database::AsyncPQuery(void (*method)(QueryResult_AutoPtr, ParamType1, ParamType2), ParamType1 param1, ParamType2 param2, const char *format,...) { ASYNC_PQUERY_BODY(format, szQuery) return AsyncQuery(method, param1, param2, szQuery); @@ -178,7 +178,7 @@ Database::AsyncPQuery(void (*method)(QueryResult*, ParamType1, ParamType2), Para template bool -Database::AsyncPQuery(void (*method)(QueryResult*, ParamType1, ParamType2, ParamType3), ParamType1 param1, ParamType2 param2, ParamType3 param3, const char *format,...) +Database::AsyncPQuery(void (*method)(QueryResult_AutoPtr, ParamType1, ParamType2, ParamType3), ParamType1 param1, ParamType2 param2, ParamType3 param3, const char *format,...) { ASYNC_PQUERY_BODY(format, szQuery) return AsyncQuery(method, param1, param2, param3, szQuery); @@ -188,18 +188,18 @@ Database::AsyncPQuery(void (*method)(QueryResult*, ParamType1, ParamType2, Param template bool -Database::DelayQueryHolder(Class *object, void (Class::*method)(QueryResult*, SqlQueryHolder*), SqlQueryHolder *holder) +Database::DelayQueryHolder(Class *object, void (Class::*method)(QueryResult_AutoPtr, SqlQueryHolder*), SqlQueryHolder *holder) { ASYNC_DELAYHOLDER_BODY(holder, itr) - return holder->Execute(new Trinity::QueryCallback(object, method, (QueryResult*)NULL, holder), m_threadBody, itr->second); + return holder->Execute(new Trinity::QueryCallback(object, method, (QueryResult_AutoPtr)NULL, holder), m_threadBody, itr->second); } template bool -Database::DelayQueryHolder(Class *object, void (Class::*method)(QueryResult*, SqlQueryHolder*, ParamType1), SqlQueryHolder *holder, ParamType1 param1) +Database::DelayQueryHolder(Class *object, void (Class::*method)(QueryResult_AutoPtr, SqlQueryHolder*, ParamType1), SqlQueryHolder *holder, ParamType1 param1) { ASYNC_DELAYHOLDER_BODY(holder, itr) - return holder->Execute(new Trinity::QueryCallback(object, method, (QueryResult*)NULL, holder, param1), m_threadBody, itr->second); + return holder->Execute(new Trinity::QueryCallback(object, method, (QueryResult_AutoPtr)NULL, holder, param1), m_threadBody, itr->second); } #undef ASYNC_QUERY_BODY -- cgit v1.2.3