Commit bcc87b6b authored by Tom Lane's avatar Tom Lane

Fix assorted memory leaks.

Per Coverity (not that any of these are so non-obvious that they should not
have been caught before commit).  The extent of leakage is probably minor
to unnoticeable, but a leak is a leak.  Back-patch as necessary.

Michael Paquier
parent 3ed26e5f
...@@ -414,6 +414,7 @@ DropReplicationSlot(PGconn *conn, const char *slot_name) ...@@ -414,6 +414,7 @@ DropReplicationSlot(PGconn *conn, const char *slot_name)
return false; return false;
} }
destroyPQExpBuffer(query);
PQclear(res); PQclear(res);
return true; return true;
} }
......
...@@ -6660,6 +6660,7 @@ getTransforms(Archive *fout, int *numTransforms) ...@@ -6660,6 +6660,7 @@ getTransforms(Archive *fout, int *numTransforms)
appendPQExpBuffer(&namebuf, "%s %s", appendPQExpBuffer(&namebuf, "%s %s",
typeInfo->dobj.name, lanname); typeInfo->dobj.name, lanname);
transforminfo[i].dobj.name = namebuf.data; transforminfo[i].dobj.name = namebuf.data;
free(lanname);
} }
PQclear(res); PQclear(res);
...@@ -15735,6 +15736,7 @@ getExtensionMembership(Archive *fout, DumpOptions *dopt, ExtensionInfo extinfo[] ...@@ -15735,6 +15736,7 @@ getExtensionMembership(Archive *fout, DumpOptions *dopt, ExtensionInfo extinfo[]
addObjectDependency(&contable->dataObj->dobj, addObjectDependency(&contable->dataObj->dobj,
reftable->dataObj->dobj.dumpId); reftable->dataObj->dobj.dumpId);
} }
PQclear(res);
destroyPQExpBuffer(query); destroyPQExpBuffer(query);
} }
......
...@@ -69,7 +69,7 @@ libpqConnect(const char *connstr) ...@@ -69,7 +69,7 @@ libpqConnect(const char *connstr)
pg_free(str); pg_free(str);
/* /*
* Also check that full_page_writes is enabled. We can get torn pages if * Also check that full_page_writes is enabled. We can get torn pages if
* a page is modified while we read it with pg_read_binary_file(), and we * a page is modified while we read it with pg_read_binary_file(), and we
* rely on full page images to fix them. * rely on full page images to fix them.
*/ */
...@@ -81,6 +81,7 @@ libpqConnect(const char *connstr) ...@@ -81,6 +81,7 @@ libpqConnect(const char *connstr)
/* /*
* Runs a query that returns a single value. * Runs a query that returns a single value.
* The result should be pg_free'd after use.
*/ */
static char * static char *
run_simple_query(const char *sql) run_simple_query(const char *sql)
...@@ -123,6 +124,8 @@ libpqGetCurrentXlogInsertLocation(void) ...@@ -123,6 +124,8 @@ libpqGetCurrentXlogInsertLocation(void)
result = ((uint64) hi) << 32 | lo; result = ((uint64) hi) << 32 | lo;
pg_free(val);
return result; return result;
} }
...@@ -201,6 +204,7 @@ libpqProcessFileList(void) ...@@ -201,6 +204,7 @@ libpqProcessFileList(void)
process_source_file(path, type, filesize, link_target); process_source_file(path, type, filesize, link_target);
} }
PQclear(res);
} }
/*---- /*----
...@@ -296,7 +300,7 @@ receiveFileChunks(const char *sql) ...@@ -296,7 +300,7 @@ receiveFileChunks(const char *sql)
if (PQgetisnull(res, 0, 2)) if (PQgetisnull(res, 0, 2))
{ {
pg_log(PG_DEBUG, pg_log(PG_DEBUG,
"received NULL chunk for file \"%s\", file has been deleted\n", "received NULL chunk for file \"%s\", file has been deleted\n",
filename); filename);
pg_free(filename); pg_free(filename);
PQclear(res); PQclear(res);
......
...@@ -393,9 +393,9 @@ vacuum_one_database(const char *dbname, vacuumingOptions *vacopts, ...@@ -393,9 +393,9 @@ vacuum_one_database(const char *dbname, vacuumingOptions *vacopts,
for (i = 0; i < ntups; i++) for (i = 0; i < ntups; i++)
{ {
appendPQExpBufferStr(&buf, appendPQExpBufferStr(&buf,
fmtQualifiedId(PQserverVersion(conn), fmtQualifiedId(PQserverVersion(conn),
PQgetvalue(res, i, 1), PQgetvalue(res, i, 1),
PQgetvalue(res, i, 0))); PQgetvalue(res, i, 0)));
simple_string_list_append(&dbtables, buf.data); simple_string_list_append(&dbtables, buf.data);
resetPQExpBuffer(&buf); resetPQExpBuffer(&buf);
...@@ -412,6 +412,7 @@ vacuum_one_database(const char *dbname, vacuumingOptions *vacopts, ...@@ -412,6 +412,7 @@ vacuum_one_database(const char *dbname, vacuumingOptions *vacopts,
concurrentCons = ntups; concurrentCons = ntups;
if (concurrentCons <= 1) if (concurrentCons <= 1)
parallel = false; parallel = false;
PQclear(res);
} }
/* /*
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment