pgsql: Fix query-duration memory leak with GIN rescans. - Mailing list pgsql-committers

From Heikki Linnakangas
Subject pgsql: Fix query-duration memory leak with GIN rescans.
Date
Msg-id E1YHFD3-0000gW-FZ@gemulon.postgresql.org
Whole thread Raw
List pgsql-committers
Fix query-duration memory leak with GIN rescans.

The requiredEntries / additionalEntries arrays were not freed in
freeScanKeys() like other per-key stuff.

It's not obvious, but startScanKey() was only ever called after the keys
have been initialized with ginNewScanKey(). That's why it doesn't need to
worry about freeing existing arrays. The ginIsNewKey() test in gingetbitmap
was never true, because ginrescan free's the existing keys, and it's not OK
to call gingetbitmap twice in a row without calling ginrescan in between.
To make that clear, remove the unnecessary ginIsNewKey(). And just to be
extra sure that nothing funny happens if there is an existing key after all,
call freeScanKeys() to free it if it exists. This makes the code more
straightforward.

(I'm seeing other similar leaks in testing a query that rescans an GIN index
scan, but that's a different issue. This just fixes the obvious leak with
those two arrays.)

Backpatch to 9.4, where GIN fast scan was added.

Branch
------
master

Details
-------
http://git.postgresql.org/pg/commitdiff/68fa75f3188c050ec62804f2bfacd3ea85404743

Modified Files
--------------
src/backend/access/gin/ginget.c  |   10 +++++++---
src/backend/access/gin/ginscan.c |   16 ++++++++++++----
src/include/access/gin_private.h |    1 +
3 files changed, 20 insertions(+), 7 deletions(-)


pgsql-committers by date:

Previous
From: Heikki Linnakangas
Date:
Subject: pgsql: Fix query-duration memory leak with GIN rescans.
Next
From: Tom Lane
Date:
Subject: pgsql: Fix assorted oversights in range selectivity estimation.