18#error "lock.h may not be included from frontend code"
68#define InvalidLocalTransactionId 0
69#define LocalTransactionIdIsValid(lxid) ((lxid) != InvalidLocalTransactionId)
70#define VirtualTransactionIdIsValid(vxid) \
71 (LocalTransactionIdIsValid((vxid).localTransactionId))
72#define VirtualTransactionIdIsRecoveredPreparedXact(vxid) \
73 ((vxid).procNumber == INVALID_PROC_NUMBER)
74#define VirtualTransactionIdEquals(vxid1, vxid2) \
75 ((vxid1).procNumber == (vxid2).procNumber && \
76 (vxid1).localTransactionId == (vxid2).localTransactionId)
77#define SetInvalidVirtualTransactionId(vxid) \
78 ((vxid).procNumber = INVALID_PROC_NUMBER, \
79 (vxid).localTransactionId = InvalidLocalTransactionId)
80#define GET_VXID_FROM_PGPROC(vxid_dst, proc) \
81 ((vxid_dst).procNumber = (proc).vxid.procNumber, \
82 (vxid_dst).localTransactionId = (proc).vxid.lxid)
85#define MAX_LOCKMODES 10
87#define LOCKBIT_ON(lockmode) (1 << (lockmode))
88#define LOCKBIT_OFF(lockmode) (~(1 << (lockmode)))
155#define LOCK_LOCKMETHOD(lock) ((LOCKMETHODID) (lock).tag.locktag_lockmethodid)
156#define LOCK_LOCKTAG(lock) ((LockTagType) (lock).tag.locktag_type)
213#define PROCLOCK_LOCKMETHOD(proclock) \
214 LOCK_LOCKMETHOD(*((proclock).tag.myLock))
274#define LOCALLOCK_LOCKMETHOD(llock) ((llock).tag.lock.locktag_lockmethodid)
275#define LOCALLOCK_LOCKTAG(llock) ((LockTagType) (llock).tag.lock.locktag_type)
355#define LockHashPartition(hashcode) \
356 ((hashcode) % NUM_LOCK_PARTITIONS)
357#define LockHashPartitionLock(hashcode) \
358 (&MainLWLockArray[LOCK_MANAGER_LWLOCK_OFFSET + \
359 LockHashPartition(hashcode)].lock)
360#define LockHashPartitionLockByIndex(i) \
361 (&MainLWLockArray[LOCK_MANAGER_LWLOCK_OFFSET + (i)].lock)
372#define LockHashPartitionLockByProc(leader_pgproc) \
373 LockHashPartitionLock(GetNumberFromPGProc(leader_pgproc))
406#ifdef USE_ASSERT_CHECKING
uint32 LocalTransactionId
LockAcquireResult LockAcquire(const LOCKTAG *locktag, LOCKMODE lockmode, bool sessionLock, bool dontWait)
bool LockHeldByMe(const LOCKTAG *locktag, LOCKMODE lockmode, bool orstronger)
PGDLLIMPORT int max_locks_per_xact
void lock_twophase_postabort(FullTransactionId fxid, uint16 info, void *recdata, uint32 len)
void PostPrepare_Locks(FullTransactionId fxid)
void lock_twophase_standby_recover(FullTransactionId fxid, uint16 info, void *recdata, uint32 len)
bool DoLockModesConflict(LOCKMODE mode1, LOCKMODE mode2)
PGDLLIMPORT bool log_lock_failures
const LockMethodData * LockMethod
void VirtualXactLockTableInsert(VirtualTransactionId vxid)
PGPROC * GetBlockingAutoVacuumPgproc(void)
void GrantAwaitedLock(void)
int LockWaiterCount(const LOCKTAG *locktag)
void AtPrepare_Locks(void)
bool LockRelease(const LOCKTAG *locktag, LOCKMODE lockmode, bool sessionLock)
Size LockManagerShmemSize(void)
void RememberSimpleDeadLock(PGPROC *proc1, LOCKMODE lockmode, LOCK *lock, PGPROC *proc2)
void InitLockManagerAccess(void)
void GrantLock(LOCK *lock, PROCLOCK *proclock, LOCKMODE lockmode)
void VirtualXactLockTableCleanup(void)
bool VirtualXactLock(VirtualTransactionId vxid, bool wait)
VirtualTransactionId * GetLockConflicts(const LOCKTAG *locktag, LOCKMODE lockmode, int *countp)
void RemoveFromWaitQueue(PGPROC *proc, uint32 hashcode)
LockAcquireResult LockAcquireExtended(const LOCKTAG *locktag, LOCKMODE lockmode, bool sessionLock, bool dontWait, bool reportMemoryError, LOCALLOCK **locallockp, bool logLockFailure)
void LockReleaseAll(LOCKMETHODID lockmethodid, bool allLocks)
void ResetAwaitedLock(void)
void LockReassignCurrentOwner(LOCALLOCK **locallocks, int nlocks)
void AbortStrongLockAcquire(void)
@ DS_BLOCKED_BY_AUTOVACUUM
BlockedProcsData * GetBlockerStatusData(int blocked_pid)
void LockManagerShmemInit(void)
bool LockHasWaiters(const LOCKTAG *locktag, LOCKMODE lockmode, bool sessionLock)
const char * GetLockmodeName(LOCKMETHODID lockmethodid, LOCKMODE mode)
void lock_twophase_postcommit(FullTransactionId fxid, uint16 info, void *recdata, uint32 len)
void InitDeadLockChecking(void)
void LockReleaseCurrentOwner(LOCALLOCK **locallocks, int nlocks)
LOCALLOCK * GetAwaitedLock(void)
void LockReleaseSession(LOCKMETHODID lockmethodid)
void MarkLockClear(LOCALLOCK *locallock)
LockData * GetLockStatusData(void)
DeadLockState DeadLockCheck(PGPROC *proc)
uint32 LockTagHashCode(const LOCKTAG *locktag)
bool LockCheckConflicts(LockMethod lockMethodTable, LOCKMODE lockmode, LOCK *lock, PROCLOCK *proclock)
void lock_twophase_recover(FullTransactionId fxid, uint16 info, void *recdata, uint32 len)
pg_noreturn void DeadLockReport(void)
LockMethod GetLocksMethodTable(const LOCK *lock)
@ LOCKACQUIRE_ALREADY_CLEAR
@ LOCKACQUIRE_ALREADY_HELD
xl_standby_lock * GetRunningTransactionLocks(int *nlocks)
LockMethod GetLockTagsMethodTable(const LOCKTAG *locktag)
static PgChecksumMode mode
struct ResourceOwnerData * owner
LOCALLOCKOWNER * lockOwners
bool holdsStrongLockCount
int requested[MAX_LOCKMODES]
int granted[MAX_LOCKMODES]
VirtualTransactionId vxid
const LOCKMASK * conflictTab
const char *const * lockModeNames
LocalTransactionId localTransactionId