In psql, avoid leaking a PGresult after a query is cancelled.

After a query cancel, the tail end of ExecQueryAndProcessResults
took care to clear any not-yet-read PGresults; but it forgot about
the one it has already read.  There would only be such a result
when handling a multi-command string made with "\;", so that you'd
have to cancel an earlier command in such a string to reach the
bug at all.  Even then, there would only be leakage of a single
PGresult per cancel, so it's not surprising nobody noticed this.
But a leak is a leak.

Noted while re-reviewing 90f517821, but this is independent of that:
it dates to 7844c9918.  Back-patch to v15 where that came in.
This commit is contained in:
Tom Lane 2024-04-08 17:00:07 -04:00
parent c21d4c416a
commit f463de59d9
1 changed files with 2 additions and 0 deletions

View File

@ -1812,6 +1812,8 @@ ExecQueryAndProcessResults(const char *query,
if (cancel_pressed)
{
/* drop this next result, as well as any others not yet read */
ClearOrSaveResult(result);
ClearOrSaveAllResults();
break;
}