aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/backend/access/heap/heapam.c10
-rw-r--r--src/backend/catalog/heap.c2
2 files changed, 9 insertions, 3 deletions
diff --git a/src/backend/access/heap/heapam.c b/src/backend/access/heap/heapam.c
index 05c790f3c77..a771ccb772c 100644
--- a/src/backend/access/heap/heapam.c
+++ b/src/backend/access/heap/heapam.c
@@ -5456,6 +5456,7 @@ FreezeMultiXactId(MultiXactId multi, uint16 t_infomask,
bool has_lockers;
TransactionId update_xid;
bool update_committed;
+ bool allow_old;
*flags = 0;
@@ -5517,7 +5518,9 @@ FreezeMultiXactId(MultiXactId multi, uint16 t_infomask,
* anything.
*/
- nmembers = GetMultiXactIdMembers(multi, &members, false);
+ allow_old = !(t_infomask & HEAP_LOCK_MASK) &&
+ HEAP_XMAX_IS_LOCKED_ONLY(t_infomask);
+ nmembers = GetMultiXactIdMembers(multi, &members, allow_old);
if (nmembers <= 0)
{
/* Nothing worth keeping */
@@ -6219,10 +6222,13 @@ heap_tuple_needs_freeze(HeapTupleHeader tuple, TransactionId cutoff_xid,
MultiXactMember *members;
int nmembers;
int i;
+ bool allow_old;
/* need to check whether any member of the mxact is too old */
- nmembers = GetMultiXactIdMembers(multi, &members, false);
+ allow_old = !(tuple->t_infomask & HEAP_LOCK_MASK) &&
+ HEAP_XMAX_IS_LOCKED_ONLY(tuple->t_infomask);
+ nmembers = GetMultiXactIdMembers(multi, &members, allow_old);
for (i = 0; i < nmembers; i++)
{
diff --git a/src/backend/catalog/heap.c b/src/backend/catalog/heap.c
index e94de8b25f4..2cf4bc033c8 100644
--- a/src/backend/catalog/heap.c
+++ b/src/backend/catalog/heap.c
@@ -911,7 +911,7 @@ AddNewRelationTuple(Relation pg_class_desc,
* commands/sequence.c.)
*/
new_rel_reltup->relfrozenxid = InvalidTransactionId;
- new_rel_reltup->relfrozenxid = InvalidMultiXactId;
+ new_rel_reltup->relminmxid = InvalidMultiXactId;
}
new_rel_reltup->relowner = relowner;