summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2011-09-16 04:27:56 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2011-09-16 04:27:56 -0400
commit57d3dc2035fe8267e877620eddc3823360c7878f (patch)
tree7cc232bf95d41dff2141ab979020c494e3e1edd3
parentf6950429da2f68de7f7c28db8441625215b40463 (diff)
downloadpostgresql-57d3dc2035fe8267e877620eddc3823360c7878f.tar.gz
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.
-rw-r--r--src/backend/access/gist/gistscan.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/src/backend/access/gist/gistscan.c b/src/backend/access/gist/gistscan.c
index 5662a3a4aa..92405283d0 100644
--- a/src/backend/access/gist/gistscan.c
+++ b/src/backend/access/gist/gistscan.c
@@ -242,6 +242,7 @@ gistendscan(PG_FUNCTION_ARGS)
GISTScanOpaque so = (GISTScanOpaque) scan->opaque;
freeGISTstate(so->giststate);
+ pfree(so->giststate);
MemoryContextDelete(so->queueCxt);
MemoryContextDelete(so->tempCxt);
pfree(so->tmpTreeItem);