Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Fix variable initialization when using buffering build with GiST
authorMichael Paquier <michael@paquier.xyz>
Wed, 10 Jul 2019 06:15:18 +0000 (15:15 +0900)
committerMichael Paquier <michael@paquier.xyz>
Wed, 10 Jul 2019 06:15:18 +0000 (15:15 +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 8e3fcfbdc112f5a60ad3381e0fbf6cbc5ced64d6..3a35096ec33fc0082a9f05662dcc0cce61341f0e 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 */