diff options
author | Alvaro Herrera | 2013-02-08 04:27:54 +0000 |
---|---|---|
committer | Alvaro Herrera | 2013-02-08 15:50:58 +0000 |
commit | 5766228bc64268369b59b07cffa7d31cd4f9c9ff (patch) | |
tree | eacc43962184e1451ba7fe044858954ff2208745 | |
parent | 335c5e9206b40c2fac3945db2499a57b948cc996 (diff) |
Fix Xmax freeze conditions
I broke this in 0ac5ad5134; previously, freezing a tuple marked with an
IS_MULTI xmax was not necessary.
Per brokenness report from Jeff Janes.
-rw-r--r-- | src/backend/access/heap/heapam.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/src/backend/access/heap/heapam.c b/src/backend/access/heap/heapam.c index 39c3ee2755..d226726654 100644 --- a/src/backend/access/heap/heapam.c +++ b/src/backend/access/heap/heapam.c @@ -5113,10 +5113,11 @@ heap_freeze_tuple(HeapTupleHeader tuple, TransactionId cutoff_xid, * cutoff; it doesn't remove dead members of a very old multixact. */ xid = HeapTupleHeaderGetRawXmax(tuple); - if (TransactionIdIsNormal(xid) && - (((!(tuple->t_infomask & HEAP_XMAX_IS_MULTI) && - TransactionIdPrecedes(xid, cutoff_xid))) || - MultiXactIdPrecedes(xid, cutoff_multi))) + if ((tuple->t_infomask & HEAP_XMAX_IS_MULTI) ? + (MultiXactIdIsValid(xid) && + MultiXactIdPrecedes(xid, cutoff_multi)) : + (TransactionIdIsNormal(xid) && + TransactionIdPrecedes(xid, cutoff_xid))) { HeapTupleHeaderSetXmax(tuple, InvalidTransactionId); |