Thread
Commits
-
Fix minor memory leak in pg_basebackup and pg_receivewal
- 213e2b7363cd 11.8 landed
- c03356995f86 12.3 landed
- 198efe774b0d 13.0 landed
-
[PATHC] Fix minor memory leak in pg_basebackup
Zhang, Jie <zhangjie2@cn.fujitsu.com> — 2020-04-15T10:06:52Z
Hi all In some cases , PGresult is not cleared. File: src\bin\pg_basebackup\streamutil.c bool RetrieveWalSegSize(PGconn *conn) { PGresult *res; ...... res = PQexec(conn, "SHOW wal_segment_size"); if (PQresultStatus(res) != PGRES_TUPLES_OK) { pg_log_error("could not send replication command \"%s\": %s", "SHOW wal_segment_size", PQerrorMessage(conn)); PQclear(res); // *** res is cleared *** return false; } ...... /* fetch xlog value and unit from the result */ if (sscanf(PQgetvalue(res, 0, 0), "%d%s", &xlog_val, xlog_unit) != 2) { pg_log_error("WAL segment size could not be parsed"); return false; // *** res is not cleared *** } ...... if (!IsValidWalSegSize(WalSegSz)) { pg_log_error(ngettext("WAL segment size must be a power of two between 1 MB and 1 GB, but the remote server reported a value of %d byte", "WAL segment size must be a power of two between 1 MB and 1 GB, but the remote server reported a value of %d bytes", WalSegSz), WalSegSz); return false; ; // *** res is not cleared *** } ...... Here is a patch. Best Regards! -
Re: [PATHC] Fix minor memory leak in pg_basebackup
Michael Paquier <michael@paquier.xyz> — 2020-04-16T06:30:36Z
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 -
RE: [PATHC] Fix minor memory leak in pg_basebackup
Zhang, Jie <zhangjie2@cn.fujitsu.com> — 2020-04-16T10:54:09Z
Hi Michael so much the better! -----Original Message----- From: Michael Paquier [mailto:michael@paquier.xyz] Sent: Thursday, April 16, 2020 2:31 PM To: Zhang, Jie/张 杰 <zhangjie2@cn.fujitsu.com> Cc: pgsql-hackers@lists.postgresql.org Subject: Re: [PATHC] Fix minor memory leak in pg_basebackup 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 -
Re: [PATHC] Fix minor memory leak in pg_basebackup
Michael Paquier <michael@paquier.xyz> — 2020-04-17T01:47:44Z
On Thu, Apr 16, 2020 at 10:54:09AM +0000, Zhang, Jie wrote: > So much the better! Thanks for confirming. Fixed, then. -- Michael