]> granicus.if.org Git - postgresql/commitdiff
Make ginbuild's funcCtx be independent of its tmpCtx.
authorTom Lane <tgl@sss.pgh.pa.us>
Sun, 29 Mar 2015 18:02:58 +0000 (14:02 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Sun, 29 Mar 2015 18:02:58 +0000 (14:02 -0400)
Previously the funcCtx was a child of the tmpCtx, but that was broken
by commit eaa5808e8ec4e82ce1a87103a6b6f687666e4e4c, which made
MemoryContextReset() delete, not reset, child contexts.  The behavior of
having a tmpCtx reset also clear the other context seems rather dubious
anyway, so let's just disentangle them.  Per report from Erik Rijkers.

In passing, fix badly-inaccurate comments about these contexts.

src/backend/access/gin/gininsert.c

index cc8d9d92ee918e39b21a4f89ac5b37303c203e1f..fc44f0205d07e3611c7a41437c2ef5d3c1958fb7 100644 (file)
@@ -370,8 +370,8 @@ ginbuild(PG_FUNCTION_ARGS)
        buildstate.buildStats.nEntryPages++;
 
        /*
-        * create a temporary memory context that is reset once for each tuple
-        * inserted into the index
+        * create a temporary memory context that is used to hold data not yet
+        * dumped out to the index
         */
        buildstate.tmpCtx = AllocSetContextCreate(CurrentMemoryContext,
                                                                                          "Gin build temporary context",
@@ -379,7 +379,11 @@ ginbuild(PG_FUNCTION_ARGS)
                                                                                          ALLOCSET_DEFAULT_INITSIZE,
                                                                                          ALLOCSET_DEFAULT_MAXSIZE);
 
-       buildstate.funcCtx = AllocSetContextCreate(buildstate.tmpCtx,
+       /*
+        * create a temporary memory context that is used for calling
+        * ginExtractEntries(), and can be reset after each tuple
+        */
+       buildstate.funcCtx = AllocSetContextCreate(CurrentMemoryContext,
                                         "Gin build temporary context for user-defined function",
                                                                                           ALLOCSET_DEFAULT_MINSIZE,
                                                                                           ALLOCSET_DEFAULT_INITSIZE,
@@ -408,6 +412,7 @@ ginbuild(PG_FUNCTION_ARGS)
        }
        MemoryContextSwitchTo(oldCtx);
 
+       MemoryContextDelete(buildstate.funcCtx);
        MemoryContextDelete(buildstate.tmpCtx);
 
        /*