diff options
author | louiz’ <louiz@louiz.org> | 2017-12-05 01:05:45 +0100 |
---|---|---|
committer | louiz’ <louiz@louiz.org> | 2017-12-05 01:05:45 +0100 |
commit | c3313d0d418cb2aaaf2226eb0a7729ef567b6afb (patch) | |
tree | c339752dec966574122a994e77c4f6ffd8d497c8 | |
parent | 24dc05dd979264143223e166faa032e75f986b21 (diff) | |
download | biboumi-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.cpp | 6 | ||||
-rw-r--r-- | src/database/postgresql_statement.hpp | 5 |
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; |