On Wed, Apr 15, 2020 at 10:06:52AM +0000, Zhang, Jie wrote: > In some cases , PGresult is not cleared. > > File: src\bin\pg_basebackup\streamutil.c > > bool > RetrieveWalSegSize(PGconn *conn) > { > PGresult *res;
RetrieveWalSegSize() gets called only once at the beginning of pg_basebackup and pg_receivewal, so that's not an issue that has major effects, still that's an issue. The first one PQclear() is needed where you say. Now for the second one, I would just move it once the code is done with the query result, aka after calling PQgetvalue(). What do you think? Please see the attached. -- Michael
diff --git a/src/bin/pg_basebackup/streamutil.c b/src/bin/pg_basebackup/streamutil.c index 1b9005722a..410116492e 100644 --- a/src/bin/pg_basebackup/streamutil.c +++ b/src/bin/pg_basebackup/streamutil.c @@ -313,9 +313,12 @@ RetrieveWalSegSize(PGconn *conn) if (sscanf(PQgetvalue(res, 0, 0), "%d%s", &xlog_val, xlog_unit) != 2) { pg_log_error("WAL segment size could not be parsed"); + PQclear(res); return false; } + PQclear(res); + /* set the multiplier based on unit to convert xlog_val to bytes */ if (strcmp(xlog_unit, "MB") == 0) multiplier = 1024 * 1024; @@ -334,7 +337,6 @@ RetrieveWalSegSize(PGconn *conn) return false; } - PQclear(res); return true; }
signature.asc
Description: PGP signature