mirror of
https://github.com/postgres/postgres.git
synced 2025-07-08 11:42:09 +03:00
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
This commit is contained in:
@ -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)
|
|||||||
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);
|
||||||
@ -15731,6 +15732,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)
|
|||||||
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)
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* 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)
|
|||||||
|
|
||||||
result = ((uint64) hi) << 32 | lo;
|
result = ((uint64) hi) << 32 | lo;
|
||||||
|
|
||||||
|
pg_free(val);
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -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)
|
|||||||
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,
|
|||||||
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,
|
|||||||
concurrentCons = ntups;
|
concurrentCons = ntups;
|
||||||
if (concurrentCons <= 1)
|
if (concurrentCons <= 1)
|
||||||
parallel = false;
|
parallel = false;
|
||||||
|
PQclear(res);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Reference in New Issue
Block a user