diff --git a/src/bin/pg_basebackup/receivelog.c b/src/bin/pg_basebackup/receivelog.c
index ca5c7f55bdf6b61a4d2eef642c8e7113256d1bdb..a88457fb28805ab349494f16d22a40638ca802e6 100644
--- a/src/bin/pg_basebackup/receivelog.c
+++ b/src/bin/pg_basebackup/receivelog.c
@@ -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);