]> granicus.if.org Git - postgresql/commitdiff
Fix variable initialization when using buffering build with GiST
authorMichael Paquier <michael@paquier.xyz>
Wed, 10 Jul 2019 06:14:54 +0000 (15:14 +0900)
committerMichael Paquier <michael@paquier.xyz>
Wed, 10 Jul 2019 06:14:54 +0000 (15:14 +0900)
This can cause valgrind to complain, as the flag marking a buffer as a
temporary copy was not getting initialized.

While on it, fill in with zeros newly-created buffer pages.  This does
not matter when loading a block from a temporary file, but it makes the
push of an index tuple into a new buffer page safer.

This has been introduced by 1d27dcf, so backpatch all the way down to
9.4.

Author: Alexander Lakhin
Discussion: https://postgr.es/m/15899-0d24fb273b3dd90c@postgresql.org
Backpatch-through: 9.4

src/backend/access/gist/gistbuildbuffers.c

index d71354140ed3bcfaaeddfee760ed4fa487c86e57..38f786848de88440f025df68da3623f3ce8f11ee 100644 (file)
@@ -138,6 +138,7 @@ gistGetNodeBuffer(GISTBuildBuffers *gfbb, GISTSTATE *giststate,
                nodeBuffer->pageBlocknum = InvalidBlockNumber;
                nodeBuffer->pageBuffer = NULL;
                nodeBuffer->queuedForEmptying = false;
+               nodeBuffer->isTemp = false;
                nodeBuffer->level = level;
 
                /*
@@ -186,8 +187,8 @@ gistAllocateNewPageBuffer(GISTBuildBuffers *gfbb)
 {
        GISTNodeBufferPage *pageBuffer;
 
-       pageBuffer = (GISTNodeBufferPage *) MemoryContextAlloc(gfbb->context,
-                                                                                                                  BLCKSZ);
+       pageBuffer = (GISTNodeBufferPage *) MemoryContextAllocZero(gfbb->context,
+                                                                                                                          BLCKSZ);
        pageBuffer->prev = InvalidBlockNumber;
 
        /* Set page free space */