41#if defined(USE_NAMED_POSIX_SEMAPHORES) && defined(EXEC_BACKEND)
42#error cannot use named POSIX semaphores with EXEC_BACKEND
57#define PG_SEM_REF(x) (&(x)->sem_padded.pgsem)
59#define IPCProtection (0600)
61#ifdef USE_NAMED_POSIX_SEMAPHORES
74#ifdef USE_NAMED_POSIX_SEMAPHORES
149#ifdef USE_NAMED_POSIX_SEMAPHORES
152 elog(
LOG,
"sem_close failed: %m");
156 elog(
LOG,
"sem_destroy failed: %m");
167#ifdef USE_NAMED_POSIX_SEMAPHORES
209 errmsg(
"could not stat data directory \"%s\": %m",
212#ifdef USE_NAMED_POSIX_SEMAPHORES
239#ifdef USE_NAMED_POSIX_SEMAPHORES
245#ifdef USE_UNNAMED_POSIX_SEMAPHORES
266 elog(
PANIC,
"too many semaphores created");
268#ifdef USE_NAMED_POSIX_SEMAPHORES
#define Assert(condition)
int errcode_for_file_access(void)
int errmsg(const char *fmt,...)
#define ereport(elevel,...)
void on_shmem_exit(pg_on_exit_callback function, Datum arg)
#define PG_CACHE_LINE_SIZE
struct PGSemaphoreData * PGSemaphore
Size PGSemaphoreShmemSize(int maxSemas)
void PGSemaphoreUnlock(PGSemaphore sema)
static void PosixSemaphoreKill(sem_t *sem)
struct PGSemaphoreData PGSemaphoreData
void PGReserveSemaphores(int maxSemas)
void PGSemaphoreReset(PGSemaphore sema)
void PGSemaphoreLock(PGSemaphore sema)
bool PGSemaphoreTryLock(PGSemaphore sema)
static PGSemaphore sharedSemas
PGSemaphore PGSemaphoreCreate(void)
static void ReleaseSemaphores(int status, Datum arg)
static void PosixSemaphoreCreate(sem_t *sem)
Size mul_size(Size s1, Size s2)
void * ShmemAlloc(Size size)
char pad[PG_CACHE_LINE_SIZE]