mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-03-13 19:57:53 +08:00
Move multixid allocation out of critical section.
It can fail if you run out of memory. This call was added in 9.3, so backpatch to 9.3 only.
This commit is contained in:
parent
d9e7873bbb
commit
b1236f4b7b
@ -2814,6 +2814,21 @@ l1:
|
||||
*/
|
||||
old_key_tuple = ExtractReplicaIdentity(relation, &tp, true, &old_key_copied);
|
||||
|
||||
/*
|
||||
* If this is the first possibly-multixact-able operation in the current
|
||||
* transaction, set my per-backend OldestMemberMXactId setting. We can be
|
||||
* certain that the transaction will never become a member of any older
|
||||
* MultiXactIds than that. (We have to do this even if we end up just
|
||||
* using our own TransactionId below, since some other backend could
|
||||
* incorporate our XID into a MultiXact immediately afterwards.)
|
||||
*/
|
||||
MultiXactIdSetOldestMember();
|
||||
|
||||
compute_new_xmax_infomask(HeapTupleHeaderGetRawXmax(tp.t_data),
|
||||
tp.t_data->t_infomask, tp.t_data->t_infomask2,
|
||||
xid, LockTupleExclusive, true,
|
||||
&new_xmax, &new_infomask, &new_infomask2);
|
||||
|
||||
START_CRIT_SECTION();
|
||||
|
||||
/*
|
||||
@ -2833,21 +2848,6 @@ l1:
|
||||
vmbuffer);
|
||||
}
|
||||
|
||||
/*
|
||||
* If this is the first possibly-multixact-able operation in the current
|
||||
* transaction, set my per-backend OldestMemberMXactId setting. We can be
|
||||
* certain that the transaction will never become a member of any older
|
||||
* MultiXactIds than that. (We have to do this even if we end up just
|
||||
* using our own TransactionId below, since some other backend could
|
||||
* incorporate our XID into a MultiXact immediately afterwards.)
|
||||
*/
|
||||
MultiXactIdSetOldestMember();
|
||||
|
||||
compute_new_xmax_infomask(HeapTupleHeaderGetRawXmax(tp.t_data),
|
||||
tp.t_data->t_infomask, tp.t_data->t_infomask2,
|
||||
xid, LockTupleExclusive, true,
|
||||
&new_xmax, &new_infomask, &new_infomask2);
|
||||
|
||||
/* store transaction information of xact deleting the tuple */
|
||||
tp.t_data->t_infomask &= ~(HEAP_XMAX_BITS | HEAP_MOVED);
|
||||
tp.t_data->t_infomask2 &= ~HEAP_KEYS_UPDATED;
|
||||
|
Loading…
x
Reference in New Issue
Block a user