summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlouiz’ <louiz@louiz.org>2017-12-05 01:05:45 +0100
committerlouiz’ <louiz@louiz.org>2017-12-05 01:05:45 +0100
commitc3313d0d418cb2aaaf2226eb0a7729ef567b6afb (patch)
treec339752dec966574122a994e77c4f6ffd8d497c8
parent24dc05dd979264143223e166faa032e75f986b21 (diff)
downloadbiboumi-c3313d0d418cb2aaaf2226eb0a7729ef567b6afb.tar.gz
biboumi-c3313d0d418cb2aaaf2226eb0a7729ef567b6afb.tar.bz2
biboumi-c3313d0d418cb2aaaf2226eb0a7729ef567b6afb.tar.xz
biboumi-c3313d0d418cb2aaaf2226eb0a7729ef567b6afb.zip
Always free the PGresult pointer returned by PQexec
Fix a somewhat big memory leak
-rw-r--r--src/database/postgresql_engine.cpp6
-rw-r--r--src/database/postgresql_statement.hpp5
2 files changed, 10 insertions, 1 deletions
diff --git a/src/database/postgresql_engine.cpp b/src/database/postgresql_engine.cpp
index 1c01ed5..4ee4223 100644
--- a/src/database/postgresql_engine.cpp
+++ b/src/database/postgresql_engine.cpp
@@ -1,6 +1,8 @@
#include <biboumi.h>
#ifdef PQ_FOUND
+#include <utils/scopeguard.hpp>
+
#include <database/postgresql_engine.hpp>
#include <database/postgresql_statement.hpp>
@@ -53,6 +55,10 @@ std::tuple<bool, std::string> PostgresqlEngine::raw_exec(const std::string& quer
{
log_debug("raw_exec:", query);
PGresult* res = PQexec(this->conn, query.data());
+ auto sg = utils::make_scope_guard([res](){
+ PQclear(res);
+ });
+
auto res_status = PQresultStatus(res);
if (res_status != PGRES_COMMAND_OK)
return std::make_tuple(false, PQresultErrorMessage(res));
diff --git a/src/database/postgresql_statement.hpp b/src/database/postgresql_statement.hpp
index 6e5dec8..30c3ec2 100644
--- a/src/database/postgresql_statement.hpp
+++ b/src/database/postgresql_statement.hpp
@@ -14,7 +14,10 @@ class PostgresqlStatement: public Statement
conn(conn)
{}
~PostgresqlStatement()
- {}
+ {
+ PQclear(this->result);
+ this->result = nullptr;
+ }
PostgresqlStatement(const PostgresqlStatement&) = delete;
PostgresqlStatement& operator=(const PostgresqlStatement&) = delete;
PostgresqlStatement(PostgresqlStatement&& other) = delete;