18#error "lwlock.h may not be included from frontend code"
22#include "storage/lwlocknames.h"
62#define LWLOCK_PADDED_SIZE PG_CACHE_LINE_SIZE
65 "Miscalculated LWLock padding");
91#define NUM_BUFFER_PARTITIONS 128
94#define LOG2_NUM_LOCK_PARTITIONS 4
95#define NUM_LOCK_PARTITIONS (1 << LOG2_NUM_LOCK_PARTITIONS)
98#define LOG2_NUM_PREDICATELOCK_PARTITIONS 4
99#define NUM_PREDICATELOCK_PARTITIONS (1 << LOG2_NUM_PREDICATELOCK_PARTITIONS)
102#define BUFFER_MAPPING_LWLOCK_OFFSET NUM_INDIVIDUAL_LWLOCKS
103#define LOCK_MANAGER_LWLOCK_OFFSET \
104 (BUFFER_MAPPING_LWLOCK_OFFSET + NUM_BUFFER_PARTITIONS)
105#define PREDICATELOCK_MANAGER_LWLOCK_OFFSET \
106 (LOCK_MANAGER_LWLOCK_OFFSET + NUM_LOCK_PARTITIONS)
107#define NUM_FIXED_LWLOCKS \
108 (PREDICATELOCK_MANAGER_LWLOCK_OFFSET + NUM_PREDICATELOCK_PARTITIONS)
176#define PG_LWLOCK(id, name)
177#define PG_LWLOCKTRANCHE(id, name) LWTRANCHE_##id,
180#undef PG_LWLOCKTRANCHE
#define StaticAssertDecl(condition, errmessage)
void LWLockUpdateVar(LWLock *lock, pg_atomic_uint64 *valptr, uint64 val)
bool LWLockHeldByMe(LWLock *lock)
void LWLockReleaseClearVar(LWLock *lock, pg_atomic_uint64 *valptr, uint64 val)
bool LWLockAcquire(LWLock *lock, LWLockMode mode)
int LWLockNewTrancheId(const char *name)
#define LWLOCK_PADDED_SIZE
LWLockPadded * GetNamedLWLockTranche(const char *tranche_name)
bool LWLockHeldByMeInMode(LWLock *lock, LWLockMode mode)
PGDLLIMPORT char ** LWLockTrancheNames
PGDLLIMPORT int NamedLWLockTrancheRequests
bool LWLockWaitForVar(LWLock *lock, pg_atomic_uint64 *valptr, uint64 oldval, uint64 *newval)
void RequestNamedLWLockTranche(const char *tranche_name, int num_lwlocks)
void LWLockRelease(LWLock *lock)
@ LWTRANCHE_FIRST_USER_DEFINED
PGDLLIMPORT int * LWLockCounter
void LWLockReleaseAll(void)
void LWLockInitialize(LWLock *lock, int tranche_id)
bool LWLockConditionalAcquire(LWLock *lock, LWLockMode mode)
bool LWLockAcquireOrWait(LWLock *lock, LWLockMode mode)
PGDLLIMPORT LWLockPadded * MainLWLockArray
PGDLLIMPORT NamedLWLockTrancheRequest * NamedLWLockTrancheRequestArray
const char * GetLWLockIdentifier(uint32 classId, uint16 eventId)
Size LWLockShmemSize(void)
bool LWLockAnyHeldByMe(LWLock *lock, int nlocks, size_t stride)
void InitLWLockAccess(void)
static PgChecksumMode mode
char tranche_name[NAMEDATALEN]
char pad[LWLOCK_PADDED_SIZE]