8000 gistendscan() forgot to free so->giststate. · postwait/postgres@0bbbf59 · GitHub
[go: up one dir, main page]

Skip to content

Commit 0bbbf59

Browse files
committed
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.
1 parent 7f7ed17 commit 0bbbf59

File tree

1 file changed

+4
-1
lines changed

1 file changed

+4
-1
lines changed

src/backend/access/gist/gistscan.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -236,14 +236,17 @@ gistendscan(PG_FUNCTION_ARGS)
236236
gistfreestack(so->stack);
237237
gistfreestack(so->markstk);
238238
if (so->giststate != NULL)
239+
{
239240
freeGISTstate(so->giststate);
241+
pfree(so->giststate);
242+
}
240243
/* drop pins on buffers -- we aren't holding any locks */
241244
if (BufferIsValid(so->curbuf))
242245
ReleaseBuffer(so->curbuf);
243246
if (BufferIsValid(so->markbuf))
244247
ReleaseBuffer(so->markbuf);
245248
MemoryContextDelete(so->tempCxt);
246-
pfree(scan->opaque);
249+
pfree(so);
247250
}
248251

249252
PG_RETURN_VOID();

0 commit comments

Comments
 (0)
0