diff --git a/src/interfaces/libpq/fe-cancel.c b/src/interfaces/libpq/fe-cancel.c
index 4f00a91b51..7dd1c45093 100644
--- a/src/interfaces/libpq/fe-cancel.c
+++ b/src/interfaces/libpq/fe-cancel.c
@@ -145,7 +145,7 @@ PQcancelCreate(PGconn *conn)
 	}
 
 	cancelConn->addr = calloc(cancelConn->naddr, sizeof(AddrInfo));
-	if (!cancelConn->connhost)
+	if (!cancelConn->addr)
 		goto oom_error;
 
 	cancelConn->addr[0].addr = conn->raddr;
@@ -155,6 +155,8 @@ PQcancelCreate(PGconn *conn)
 	return (PGcancelConn *) cancelConn;
 
 oom_error:
+	pqReleaseConnHosts(cancelConn);
+
 	conn->status = CONNECTION_BAD;
 	libpq_append_conn_error(cancelConn, "out of memory");
 	return (PGcancelConn *) cancelConn;
diff --git a/src/interfaces/libpq/fe-connect.c b/src/interfaces/libpq/fe-connect.c
index 548ad118fb..8b3d51e39c 100644
--- a/src/interfaces/libpq/fe-connect.c
+++ b/src/interfaces/libpq/fe-connect.c
@@ -4727,7 +4727,7 @@ pqReleaseConnHosts(PGconn *conn)
 {
 	if (conn->connhost)
 	{
-		for (int i = 0; i < conn->nconnhost; ++i)
+		for (int i = 0; i < conn->nconnhost; i++)
 		{
 			free(conn->connhost[i].host);
 			free(conn->connhost[i].hostaddr);
@@ -4740,7 +4740,12 @@ pqReleaseConnHosts(PGconn *conn)
 			}
 		}
 		free(conn->connhost);
+		conn->connhost = NULL;
 	}
+	free(conn->addr);
+	conn->addr = NULL;
+	conn->nconnhost = 0;
+	conn->naddr = 0;
 }
 
 /*
