summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlvaro Herrera2013-02-08 04:27:54 +0000
committerAlvaro Herrera2013-02-08 15:50:58 +0000
commit5766228bc64268369b59b07cffa7d31cd4f9c9ff (patch)
treeeacc43962184e1451ba7fe044858954ff2208745
parent335c5e9206b40c2fac3945db2499a57b948cc996 (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.c9
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);