Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Free PQresult on error in pg_receivexlog.
authorHeikki Linnakangas <heikki.linnakangas@iki.fi>
Mon, 12 May 2014 07:17:40 +0000 (10:17 +0300)
committerHeikki Linnakangas <heikki.linnakangas@iki.fi>
Mon, 12 May 2014 08:01:26 +0000 (11:01 +0300)
The leak is fairly small and rare, but a leak nevertheless.

Per Coverity report. Backpatch to 9.2, where pg_receivexlog was added.
pg_basebackup shares the code, but it always exits on error, so there is
no real leak.

src/bin/pg_basebackup/receivelog.c

index ca5c7f55bdf6b61a4d2eef642c8e7113256d1bdb..a88457fb28805ab349494f16d22a40638ca802e6 100644 (file)
@@ -858,6 +858,7 @@ HandleCopyStream(PGconn *conn, XLogRecPtr startpos, uint32 timeline,
                if (!close_walfile(basedir, partial_suffix, blockpos))
                {
                    /* Error message written in close_walfile() */
+                   PQclear(res);
                    goto error;
                }
                if (PQresultStatus(res) == PGRES_COPY_IN)
@@ -867,6 +868,7 @@ HandleCopyStream(PGconn *conn, XLogRecPtr startpos, uint32 timeline,
                        fprintf(stderr,
                                _("%s: could not send copy-end packet: %s"),
                                progname, PQerrorMessage(conn));
+                       PQclear(res);
                        goto error;
                    }
                    res = PQgetResult(conn);