From 6d6384f27f9c35f81680f69af4102292eabaa9a5 Mon Sep 17 00:00:00 2001 From: Vinod Sridharan Date: Thu, 17 Apr 2025 13:51:41 -0700 Subject: [PATCH] Fix memory leak in _gin_parallel_merge --- src/backend/access/gin/gininsert.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/backend/access/gin/gininsert.c b/src/backend/access/gin/gininsert.c index a65acd891049..263b143e3132 100644 --- a/src/backend/access/gin/gininsert.c +++ b/src/backend/access/gin/gininsert.c @@ -1616,6 +1616,7 @@ _gin_parallel_merge(GinBuildState *state) Size tuplen; double reltuples = 0; GinBuffer *buffer; + MemoryContext oldCtx; /* GIN tuples from workers, merged by leader */ double numtuples = 0; @@ -1689,9 +1690,12 @@ _gin_parallel_merge(GinBuildState *state) oldCtx = MemoryContextSwitchTo(state->tmpCtx); + oldCtx = MemoryContextSwitchTo(state->tmpCtx); ginEntryInsert(&state->ginstate, buffer->attnum, buffer->key, buffer->category, buffer->items, buffer->nitems, &state->buildStats); + MemoryContextSwitchTo(oldCtx); + MemoryContextReset(state->tmpCtx); MemoryContextSwitchTo(oldCtx); MemoryContextReset(state->tmpCtx); @@ -1720,9 +1724,12 @@ _gin_parallel_merge(GinBuildState *state) oldCtx = MemoryContextSwitchTo(state->tmpCtx); + oldCtx = MemoryContextSwitchTo(state->tmpCtx); ginEntryInsert(&state->ginstate, buffer->attnum, buffer->key, buffer->category, buffer->items, buffer->nfrozen, &state->buildStats); + MemoryContextSwitchTo(oldCtx); + MemoryContextReset(state->tmpCtx); MemoryContextSwitchTo(oldCtx); MemoryContextReset(state->tmpCtx);