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.
This commit is contained in:
parent
5d68fe14fc
commit
9bc6daae09
@ -135,12 +135,15 @@ gistendscan(PG_FUNCTION_ARGS)
|
|||||||
{
|
{
|
||||||
gistfreestack(so->stack);
|
gistfreestack(so->stack);
|
||||||
if (so->giststate != NULL)
|
if (so->giststate != NULL)
|
||||||
|
{
|
||||||
freeGISTstate(so->giststate);
|
freeGISTstate(so->giststate);
|
||||||
|
pfree(so->giststate);
|
||||||
|
}
|
||||||
/* drop pins on buffers -- we aren't holding any locks */
|
/* drop pins on buffers -- we aren't holding any locks */
|
||||||
if (BufferIsValid(so->curbuf))
|
if (BufferIsValid(so->curbuf))
|
||||||
ReleaseBuffer(so->curbuf);
|
ReleaseBuffer(so->curbuf);
|
||||||
MemoryContextDelete(so->tempCxt);
|
MemoryContextDelete(so->tempCxt);
|
||||||
pfree(scan->opaque);
|
pfree(so);
|
||||||
}
|
}
|
||||||
|
|
||||||
PG_RETURN_VOID();
|
PG_RETURN_VOID();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user