82 SECURITY_ATTRIBUTES sec_attrs;
88 elog(
PANIC,
"too many semaphores created");
90 ZeroMemory(&sec_attrs,
sizeof(sec_attrs));
91 sec_attrs.nLength =
sizeof(sec_attrs);
92 sec_attrs.lpSecurityDescriptor = NULL;
93 sec_attrs.bInheritHandle = TRUE;
96 cur_handle = CreateSemaphore(&sec_attrs, 1, 32767, NULL);
104 (
errmsg(
"could not create semaphore: error code %lu",
157 rc = WaitForMultipleObjectsEx(2, wh, FALSE, INFINITE, TRUE);
164 case WAIT_OBJECT_0 + 1:
168 case WAIT_IO_COMPLETION:
180 (
errmsg(
"could not lock semaphore: error code %lu",
184 elog(
FATAL,
"unexpected return code from WaitForMultipleObjectsEx(): %lu", rc);
198 if (!ReleaseSemaphore(sema, 1, NULL))
200 (
errmsg(
"could not unlock semaphore: error code %lu",
214 ret = WaitForSingleObject(sema, 0);
216 if (ret == WAIT_OBJECT_0)
221 else if (ret == WAIT_TIMEOUT)
230 (
errmsg(
"could not try-lock semaphore: error code %lu",
int errmsg(const char *fmt,...)
#define ereport(elevel,...)
Assert(PointerIsAligned(start, uint64))
void on_shmem_exit(pg_on_exit_callback function, Datum arg)
#define CHECK_FOR_INTERRUPTS()
void pgwin32_dispatch_queued_signals(void)
HANDLE pgwin32_signal_event
Size PGSemaphoreShmemSize(int maxSemas)
void PGSemaphoreUnlock(PGSemaphore sema)
void PGReserveSemaphores(int maxSemas)
void PGSemaphoreReset(PGSemaphore sema)
void PGSemaphoreLock(PGSemaphore sema)
bool PGSemaphoreTryLock(PGSemaphore sema)
PGSemaphore PGSemaphoreCreate(void)
static void ReleaseSemaphores(int code, Datum arg)