@@ -3245,6 +3245,7 @@ heap_delete(Relation relation, ItemPointer tid,
3245
3245
result == HeapTupleUpdated ||
3246
3246
result == HeapTupleBeingUpdated );
3247
3247
Assert (!(tp .t_data -> t_infomask & HEAP_XMAX_INVALID ));
3248
+ hufd -> result = result ;
3248
3249
hufd -> ctid = tp .t_data -> t_ctid ;
3249
3250
hufd -> xmax = HeapTupleHeaderGetUpdateXid (tp .t_data );
3250
3251
if (result == HeapTupleSelfUpdated )
@@ -3507,7 +3508,7 @@ simple_heap_delete(Relation relation, ItemPointer tid)
3507
3508
HTSU_Result
3508
3509
heap_update (Relation relation , ItemPointer otid , HeapTuple newtup ,
3509
3510
CommandId cid , Snapshot crosscheck , bool wait ,
3510
- HeapUpdateFailureData * hufd , LockTupleMode * lockmode )
3511
+ HeapUpdateFailureData * hufd )
3511
3512
{
3512
3513
HTSU_Result result ;
3513
3514
TransactionId xid = GetCurrentTransactionId ();
@@ -3547,8 +3548,10 @@ heap_update(Relation relation, ItemPointer otid, HeapTuple newtup,
3547
3548
infomask2_old_tuple ,
3548
3549
infomask_new_tuple ,
3549
3550
infomask2_new_tuple ;
3551
+ LockTupleMode lockmode ;
3550
3552
3551
3553
Assert (ItemPointerIsValid (otid ));
3554
+ Assert (hufd != NULL );
3552
3555
3553
3556
/*
3554
3557
* Forbid this during a parallel operation, lest it allocate a combocid.
@@ -3664,7 +3667,7 @@ heap_update(Relation relation, ItemPointer otid, HeapTuple newtup,
3664
3667
*/
3665
3668
if (!bms_overlap (modified_attrs , key_attrs ))
3666
3669
{
3667
- * lockmode = LockTupleNoKeyExclusive ;
3670
+ lockmode = hufd -> lockmode = LockTupleNoKeyExclusive ;
3668
3671
mxact_status = MultiXactStatusNoKeyUpdate ;
3669
3672
key_intact = true;
3670
3673
@@ -3681,7 +3684,7 @@ heap_update(Relation relation, ItemPointer otid, HeapTuple newtup,
3681
3684
}
3682
3685
else
3683
3686
{
3684
- * lockmode = LockTupleExclusive ;
3687
+ lockmode = hufd -> lockmode = LockTupleExclusive ;
3685
3688
mxact_status = MultiXactStatusUpdate ;
3686
3689
key_intact = false;
3687
3690
}
@@ -3759,12 +3762,12 @@ heap_update(Relation relation, ItemPointer otid, HeapTuple newtup,
3759
3762
int remain ;
3760
3763
3761
3764
if (DoesMultiXactIdConflict ((MultiXactId ) xwait , infomask ,
3762
- * lockmode ))
3765
+ lockmode ))
3763
3766
{
3764
3767
LockBuffer (buffer , BUFFER_LOCK_UNLOCK );
3765
3768
3766
3769
/* acquire tuple lock, if necessary */
3767
- heap_acquire_tuplock (relation , & (oldtup .t_self ), * lockmode ,
3770
+ heap_acquire_tuplock (relation , & (oldtup .t_self ), lockmode ,
3768
3771
LockWaitBlock , & have_tuple_lock );
3769
3772
3770
3773
/* wait for multixact */
@@ -3848,7 +3851,7 @@ heap_update(Relation relation, ItemPointer otid, HeapTuple newtup,
3848
3851
* lock.
3849
3852
*/
3850
3853
LockBuffer (buffer , BUFFER_LOCK_UNLOCK );
3851
- heap_acquire_tuplock (relation , & (oldtup .t_self ), * lockmode ,
3854
+ heap_acquire_tuplock (relation , & (oldtup .t_self ), lockmode ,
3852
3855
LockWaitBlock , & have_tuple_lock );
3853
3856
XactLockTableWait (xwait , relation , & oldtup .t_self ,
3854
3857
XLTW_Update );
@@ -3887,6 +3890,7 @@ heap_update(Relation relation, ItemPointer otid, HeapTuple newtup,
3887
3890
result == HeapTupleUpdated ||
3888
3891
result == HeapTupleBeingUpdated );
3889
3892
Assert (!(oldtup .t_data -> t_infomask & HEAP_XMAX_INVALID ));
3893
+ hufd -> result = result ;
3890
3894
hufd -> ctid = oldtup .t_data -> t_ctid ;
3891
3895
hufd -> xmax = HeapTupleHeaderGetUpdateXid (oldtup .t_data );
3892
3896
if (result == HeapTupleSelfUpdated )
@@ -3895,7 +3899,7 @@ heap_update(Relation relation, ItemPointer otid, HeapTuple newtup,
3895
3899
hufd -> cmax = InvalidCommandId ;
3896
3900
UnlockReleaseBuffer (buffer );
3897
3901
if (have_tuple_lock )
3898
- UnlockTupleTuplock (relation , & (oldtup .t_self ), * lockmode );
3902
+ UnlockTupleTuplock (relation , & (oldtup .t_self ), lockmode );
3899
3903
if (vmbuffer != InvalidBuffer )
3900
3904
ReleaseBuffer (vmbuffer );
3901
3905
bms_free (hot_attrs );
@@ -3933,7 +3937,7 @@ heap_update(Relation relation, ItemPointer otid, HeapTuple newtup,
3933
3937
compute_new_xmax_infomask (HeapTupleHeaderGetRawXmax (oldtup .t_data ),
3934
3938
oldtup .t_data -> t_infomask ,
3935
3939
oldtup .t_data -> t_infomask2 ,
3936
- xid , * lockmode , true,
3940
+ xid , lockmode , true,
3937
3941
& xmax_old_tuple , & infomask_old_tuple ,
3938
3942
& infomask2_old_tuple );
3939
3943
@@ -4050,7 +4054,7 @@ heap_update(Relation relation, ItemPointer otid, HeapTuple newtup,
4050
4054
compute_new_xmax_infomask (HeapTupleHeaderGetRawXmax (oldtup .t_data ),
4051
4055
oldtup .t_data -> t_infomask ,
4052
4056
oldtup .t_data -> t_infomask2 ,
4053
- xid , * lockmode , false,
4057
+ xid , lockmode , false,
4054
4058
& xmax_lock_old_tuple , & infomask_lock_old_tuple ,
4055
4059
& infomask2_lock_old_tuple );
4056
4060
@@ -4362,7 +4366,7 @@ heap_update(Relation relation, ItemPointer otid, HeapTuple newtup,
4362
4366
* Release the lmgr tuple lock, if we had it.
4363
4367
*/
4364
4368
if (have_tuple_lock )
4365
- UnlockTupleTuplock (relation , & (oldtup .t_self ), * lockmode );
4369
+ UnlockTupleTuplock (relation , & (oldtup .t_self ), lockmode );
4366
4370
4367
4371
pgstat_count_heap_update (relation , use_hot_update );
4368
4372
@@ -4586,12 +4590,11 @@ simple_heap_update(Relation relation, ItemPointer otid, HeapTuple tup)
4586
4590
{
4587
4591
HTSU_Result result ;
4588
4592
HeapUpdateFailureData hufd ;
4589
- LockTupleMode lockmode ;
4590
4593
4591
4594
result = heap_update (relation , otid , tup ,
4592
4595
GetCurrentCommandId (true), InvalidSnapshot ,
4593
4596
true /* wait for commit */ ,
4594
- & hufd , & lockmode );
4597
+ & hufd );
4595
4598
switch (result )
4596
4599
{
4597
4600
case HeapTupleSelfUpdated :
@@ -5177,6 +5180,7 @@ heap_lock_tuple(Relation relation, HeapTuple tuple,
5177
5180
Assert (result == HeapTupleSelfUpdated || result == HeapTupleUpdated ||
5178
5181
result == HeapTupleWouldBlock );
5179
5182
Assert (!(tuple -> t_data -> t_infomask & HEAP_XMAX_INVALID ));
5183
+ hufd -> result = result ;
5180
5184
hufd -> ctid = tuple -> t_data -> t_ctid ;
5181
5185
hufd -> xmax = HeapTupleHeaderGetUpdateXid (tuple -> t_data );
5182
5186
if (result == HeapTupleSelfUpdated )
0 commit comments