Fix potential data corruption during freeze
authorTeodor Sigaev <teodor@sigaev.ru>
Thu, 6 Jul 2017 14:18:55 +0000 (17:18 +0300)
committerTeodor Sigaev <teodor@sigaev.ru>
Thu, 6 Jul 2017 14:18:55 +0000 (17:18 +0300)
Fix oversight in 3b97e6823b94 bug fix. Bitwise AND is used instead of OR and
it cleans all bits in t_infomask heap tuple field.

Backpatch to 9.3

src/backend/access/heap/heapam.c

index 9766723deb3784170b37b368b5d46ddf608cadf9..011f2b9c54274d45d42a308c74afe8e8426c3a50 100644 (file)
@@ -6627,7 +6627,7 @@ heap_prepare_freeze_tuple(HeapTupleHeader tuple, TransactionId cutoff_xid,
            frz->t_infomask &= ~HEAP_XMAX_BITS;
            frz->xmax = newxmax;
            if (flags & FRM_MARK_COMMITTED)
-               frz->t_infomask &= HEAP_XMAX_COMMITTED;
+               frz->t_infomask |= HEAP_XMAX_COMMITTED;
            changed = true;
            totally_frozen = false;
        }