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)
180#define PG_LWLOCK(id, name)
181#define PG_LWLOCKTRANCHE(id, name) LWTRANCHE_##id,
184#undef PG_LWLOCKTRANCHE
void LWLockUpdateVar(LWLock *lock, pg_atomic_uint64 *valptr, uint64 val)
union LWLockPadded LWLockPadded
bool LWLockHeldByMe(LWLock *lock)
void LWLockReleaseClearVar(LWLock *lock, pg_atomic_uint64 *valptr, uint64 val)
bool LWLockAcquire(LWLock *lock, LWLockMode mode)
void LWLockDisown(LWLock *lock)
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)
void LWLockReleaseDisowned(LWLock *lock, LWLockMode mode)
bool LWLockConditionalAcquire(LWLock *lock, LWLockMode mode)
bool LWLockAcquireOrWait(LWLock *lock, LWLockMode mode)
PGDLLIMPORT LWLockPadded * MainLWLockArray
StaticAssertDecl(sizeof(LWLock)<=LWLOCK_PADDED_SIZE, "Miscalculated LWLock padding")
PGDLLIMPORT NamedLWLockTrancheRequest * NamedLWLockTrancheRequestArray
void ForEachLWLockHeldByMe(void(*callback)(LWLock *, LWLockMode, void *), void *context)
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]
static void callback(struct sockaddr *addr, struct sockaddr *mask, void *unused)
char pad[LWLOCK_PADDED_SIZE]