diff --git a/src/gausskernel/storage/access/ustore/knl_uheap.cpp b/src/gausskernel/storage/access/ustore/knl_uheap.cpp index 666aac7b1..8b3b787b2 100644 --- a/src/gausskernel/storage/access/ustore/knl_uheap.cpp +++ b/src/gausskernel/storage/access/ustore/knl_uheap.cpp @@ -1458,7 +1458,7 @@ static bool UHeapWait(Relation relation, Buffer buffer, UHeapTuple utuple, LockT } } else { if (InvalidSubTransactionId != subXid) { - SubXactLockTableWait(topXid, subXid, waitSec); + SubXactLockTableWait(topXid, subXid, true, waitSec); isSubXact = true; } else { XactLockTableWait(topXid, true, waitSec); diff --git a/src/gausskernel/storage/lmgr/lmgr.cpp b/src/gausskernel/storage/lmgr/lmgr.cpp index 809db8618..3154d85bf 100755 --- a/src/gausskernel/storage/lmgr/lmgr.cpp +++ b/src/gausskernel/storage/lmgr/lmgr.cpp @@ -738,7 +738,7 @@ SubXactLockTableDelete(SubTransactionId subxid) * still in progress. */ void -SubXactLockTableWait(TransactionId xid, SubTransactionId subxid, int waitSec) +SubXactLockTableWait(TransactionId xid, SubTransactionId subxid, bool allow_con_update, int waitSec) { LOCKTAG tag; Assert(TransactionIdIsValid(xid)); @@ -747,7 +747,7 @@ SubXactLockTableWait(TransactionId xid, SubTransactionId subxid, int waitSec) SET_LOCKTAG_SUBTRANSACTION(tag, xid, subxid); - (void) LockAcquire(&tag, ShareLock, false, false, waitSec); + (void) LockAcquire(&tag, ShareLock, false, false, allow_con_update, waitSec); LockRelease(&tag, ShareLock, false); } diff --git a/src/include/storage/lmgr.h b/src/include/storage/lmgr.h index 288e3a6d7..8f1c8e236 100644 --- a/src/include/storage/lmgr.h +++ b/src/include/storage/lmgr.h @@ -70,7 +70,7 @@ extern bool ConditionalXactLockTableWait(TransactionId xid, bool waitparent = tr /* Lock a SubXID */ extern void SubXactLockTableInsert(SubTransactionId subxid); -extern void SubXactLockTableWait(TransactionId xid, SubTransactionId subxid, int waitSec = 0); +extern void SubXactLockTableWait(TransactionId xid, SubTransactionId subxid, bool allow_con_update = false, int waitSec = 0); extern bool ConditionalSubXactLockTableWait(TransactionId xid, SubTransactionId subxid); /* Lock a general object (other than a relation) of the current database */