From a58ade137d89b1a2870c94b6e4e4d9990a18a975 Mon Sep 17 00:00:00 2001 From: Dennis Felsing Date: Thu, 27 Dec 2018 14:31:56 +0100 Subject: [PATCH] More SQL fixes Should help with some crashes Still doesn't call thread_init Still shares statements and connections between threads --- src/engine/server/sql_server.cpp | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/engine/server/sql_server.cpp b/src/engine/server/sql_server.cpp index da59dfb57..fb24925f3 100644 --- a/src/engine/server/sql_server.cpp +++ b/src/engine/server/sql_server.cpp @@ -36,7 +36,15 @@ CSqlServer::~CSqlServer() try { if (m_pResults) + { delete m_pResults; + m_pResults = 0; + } + if (m_pStatement) + { + delete m_pStatement; + m_pStatement = 0; + } if (m_pConnection) { delete m_pConnection; @@ -120,7 +128,7 @@ bool CSqlServer::Connect() } m_pConnection = m_pDriver->connect(connection_properties); - // Create Statement + // Create statement m_pStatement = m_pConnection->createStatement(); if (m_SetUpDB) @@ -200,16 +208,20 @@ void CSqlServer::CreateTables() void CSqlServer::executeSql(const char *pCommand) { + scope_lock LockScope(&m_SqlLock); m_pStatement->execute(pCommand); } void CSqlServer::executeSqlQuery(const char *pQuery) { + scope_lock LockScope(&m_SqlLock); if (m_pResults) + { delete m_pResults; + // set it to 0, so exceptions raised from executeQuery can not make m_pResults point to invalid memory + m_pResults = 0; + } - // set it to 0, so exceptions raised from executeQuery can not make m_pResults point to invalid memory - m_pResults = 0; m_pResults = m_pStatement->executeQuery(pQuery); }