try to fix some sketchy logic for setting can_allocate_segment
authorRobert Haas <[email protected]>
Wed, 22 Sep 2021 20:06:15 +0000 (16:06 -0400)
committerRobert Haas <[email protected]>
Wed, 22 Sep 2021 20:06:15 +0000 (16:06 -0400)
src/backend/access/conveyor/conveyor.c

index b96b6c1fa5564687678dac14342e3a8c76291b63..7cdaf12b3ea520edbda976dc263b4e90a0fd40ca 100644 (file)
@@ -269,8 +269,8 @@ ConveyorBeltGetNewPage(ConveyorBelt *cb, CBPageNo *pageno)
                 * size of the relation on disk is large enough.
                 */
                can_allocate_segment =
-                       (insert_state != CBM_INSERT_NEEDS_PAYLOAD_SEGMENT
-                        || insert_state != CBM_INSERT_NEEDS_INDEX_SEGMENT) &&
+                       (insert_state == CBM_INSERT_NEEDS_PAYLOAD_SEGMENT
+                        || insert_state == CBM_INSERT_NEEDS_INDEX_SEGMENT) &&
                        mode == BUFFER_LOCK_EXCLUSIVE &&
                        (free_segno != CB_INVALID_SEGMENT) &&
                        (free_segno < next_segno ||
@@ -282,9 +282,8 @@ ConveyorBeltGetNewPage(ConveyorBelt *cb, CBPageNo *pageno)
                 * locks.
                 */
                if (can_allocate_segment &&
-                       insert_state != CBM_INSERT_NEEDS_INDEX_SEGMENT &&
-                       !BufferIsValid(indexbuffer) &&
-                       !BufferIsValid(prevbuffer))
+                       insert_state == CBM_INSERT_NEEDS_INDEX_SEGMENT &&
+                       (!BufferIsValid(indexbuffer) || !BufferIsValid(prevbuffer)))
                        can_allocate_segment = false;
 
                /*