From 9bc6daae09e882e76850a0aa8c50de9fe07ebd15 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Fri, 16 Sep 2011 04:28:07 -0400 Subject: gistendscan() forgot to free so->giststate. This oversight led to a massive memory leak --- upwards of 10KB per tuple --- during creation-time verification of an exclusion constraint based on a GIST index. In most other scenarios it'd just be a leak of 10KB that would be recovered at end of query, so not too significant; though perhaps the leak would be noticeable in a situation where a GIST index was being used in a nestloop inner indexscan. In any case, it's a real leak of long standing, so patch all supported branches. Per report from Harald Fuchs. --- src/backend/access/gist/gistscan.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'src/backend/access/gist/gistscan.c') diff --git a/src/backend/access/gist/gistscan.c b/src/backend/access/gist/gistscan.c index aed3e95b4e3..aa9f2c036bc 100644 --- a/src/backend/access/gist/gistscan.c +++ b/src/backend/access/gist/gistscan.c @@ -135,12 +135,15 @@ gistendscan(PG_FUNCTION_ARGS) { gistfreestack(so->stack); if (so->giststate != NULL) + { freeGISTstate(so->giststate); + pfree(so->giststate); + } /* drop pins on buffers -- we aren't holding any locks */ if (BufferIsValid(so->curbuf)) ReleaseBuffer(so->curbuf); MemoryContextDelete(so->tempCxt); - pfree(scan->opaque); + pfree(so); } PG_RETURN_VOID(); -- cgit v1.2.3