]> granicus.if.org Git - postgresql/commitdiff
Fix unitialized variables
authorAlvaro Herrera <alvherre@alvh.no-ip.org>
Thu, 13 Aug 2015 03:12:07 +0000 (00:12 -0300)
committerAlvaro Herrera <alvherre@alvh.no-ip.org>
Thu, 13 Aug 2015 03:12:07 +0000 (00:12 -0300)
As complained by clang, reported by Andres Freund.  Brown paper bag bug
in ccc4c074994d.

Add some comments, too.

Backpatch to 9.5, like that one.

src/backend/access/brin/brin_pageops.c

index 875544e336c07eca7039fb74fc3edf1c783581b1..6a2fd474d9aa2c664e142fa5b1967da5a8202789 100644 (file)
@@ -86,6 +86,7 @@ brin_doupdate(Relation idxrel, BlockNumber pagesPerRange,
        {
                LockBuffer(oldbuf, BUFFER_LOCK_EXCLUSIVE);
                newbuf = InvalidBuffer;
+               extended = false;
        }
        oldpage = BufferGetPage(oldbuf);
        oldlp = PageGetItemId(oldpage, oldoff);
@@ -335,9 +336,8 @@ brin_doinsert(Relation idxrel, BlockNumber pagesPerRange,
        brinRevmapExtend(revmap, heapBlk);
 
        /*
-        * Obtain a locked buffer to insert the new tuple.  Note
-        * brin_getinsertbuffer ensures there's enough space in the returned
-        * buffer.
+        * Acquire lock on buffer supplied by caller, if any.  If it doesn't have
+        * enough space, unpin it to obtain a new one below.
         */
        if (BufferIsValid(*buffer))
        {
@@ -354,12 +354,18 @@ brin_doinsert(Relation idxrel, BlockNumber pagesPerRange,
                }
        }
 
+       /*
+        * If we still don't have a usable buffer, have brin_getinsertbuffer
+        * obtain one for us.
+        */
        if (!BufferIsValid(*buffer))
        {
                *buffer = brin_getinsertbuffer(idxrel, InvalidBuffer, itemsz, &extended);
                Assert(BufferIsValid(*buffer));
                Assert(extended || br_page_get_freespace(BufferGetPage(*buffer)) >= itemsz);
        }
+       else
+               extended = false;
 
        /* Now obtain lock on revmap buffer */
        revmapbuf = brinLockRevmapPageForUpdate(revmap, heapBlk);
@@ -367,6 +373,7 @@ brin_doinsert(Relation idxrel, BlockNumber pagesPerRange,
        page = BufferGetPage(*buffer);
        blk = BufferGetBlockNumber(*buffer);
 
+       /* Execute the actual insertion */
        START_CRIT_SECTION();
        if (extended)
                brin_page_init(BufferGetPage(*buffer), BRIN_PAGETYPE_REGULAR);