gistendscan() forgot to free so->giststate.
authorTom Lane <tgl@sss.pgh.pa.us>
Fri, 16 Sep 2011 08:27:49 +0000 (04:27 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Fri, 16 Sep 2011 08:27:49 +0000 (04:27 -0400)
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

index 97a19aa2ac95411774e0ea38d2778f591fc10941..5071d46150e4e777d43bdcfb2fe5b93fb1bc2a7c 100644 (file)
@@ -240,6 +240,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);