From: Tom Lane Date: Fri, 16 Sep 2011 08:27:56 +0000 (-0400) Subject: gistendscan() forgot to free so->giststate. X-Git-Tag: REL9_1_1~7 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=57d3dc2035fe8267e877620eddc3823360c7878f;p=postgresql 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. --- 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);