diff --git a/src/bin/pg_basebackup/receivelog.c b/src/bin/pg_basebackup/receivelog.c
index 99d875be9c5c095edeed3e0446abee9428c3c63d..a260881517de995190e3fccedd8d5d7f322d2770 100644
--- a/src/bin/pg_basebackup/receivelog.c
+++ b/src/bin/pg_basebackup/receivelog.c
@@ -628,6 +628,7 @@ ReceiveXlogStream(PGconn *conn, XLogRecPtr startpos, uint32 timeline,
 				fprintf(stderr,
 				   _("%s: unexpected termination of replication stream: %s"),
 						progname, PQresultErrorMessage(res));
+				PQclear(res);
 				goto error;
 			}
 			PQclear(res);
@@ -642,6 +643,8 @@ ReceiveXlogStream(PGconn *conn, XLogRecPtr startpos, uint32 timeline,
 		}
 		else if (PQresultStatus(res) == PGRES_COMMAND_OK)
 		{
+			PQclear(res);
+
 			/*
 			 * End of replication (ie. controlled shut down of the server).
 			 *
@@ -663,6 +666,7 @@ ReceiveXlogStream(PGconn *conn, XLogRecPtr startpos, uint32 timeline,
 			fprintf(stderr,
 					_("%s: unexpected termination of replication stream: %s"),
 					progname, PQresultErrorMessage(res));
+			PQclear(res);
 			goto error;
 		}
 	}
@@ -839,6 +843,7 @@ HandleCopyStream(PGconn *conn, XLogRecPtr startpos, uint32 timeline,
 						PQclear(res);
 						goto error;
 					}
+					PQclear(res);
 					res = PQgetResult(conn);
 				}
 				still_sending = false;