1
0
mirror of https://github.com/postgres/postgres.git synced 2025-07-21 16:02:15 +03:00

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.
This commit is contained in:
Alvaro Herrera
2013-02-08 01:27:54 -03:00
parent 335c5e9206
commit 5766228bc6

View File

@ -5113,10 +5113,11 @@ heap_freeze_tuple(HeapTupleHeader tuple, TransactionId cutoff_xid,
* cutoff; it doesn't remove dead members of a very old multixact. * cutoff; it doesn't remove dead members of a very old multixact.
*/ */
xid = HeapTupleHeaderGetRawXmax(tuple); xid = HeapTupleHeaderGetRawXmax(tuple);
if (TransactionIdIsNormal(xid) && if ((tuple->t_infomask & HEAP_XMAX_IS_MULTI) ?
(((!(tuple->t_infomask & HEAP_XMAX_IS_MULTI) && (MultiXactIdIsValid(xid) &&
TransactionIdPrecedes(xid, cutoff_xid))) || MultiXactIdPrecedes(xid, cutoff_multi)) :
MultiXactIdPrecedes(xid, cutoff_multi))) (TransactionIdIsNormal(xid) &&
TransactionIdPrecedes(xid, cutoff_xid)))
{ {
HeapTupleHeaderSetXmax(tuple, InvalidTransactionId); HeapTupleHeaderSetXmax(tuple, InvalidTransactionId);