Thread

Commits

  1. Fix minor memory leak in pg_basebackup and pg_receivewal

  1. [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!
    
    
    
    
    
    
  2. 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
    
  3. 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
    
    
    
  4. 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