|
|
|
@ -225,7 +225,7 @@ InitializeLatchSupport(void) |
|
|
|
|
* Initialize a process-local latch. |
|
|
|
|
*/ |
|
|
|
|
void |
|
|
|
|
InitLatch(volatile Latch *latch) |
|
|
|
|
InitLatch(Latch *latch) |
|
|
|
|
{ |
|
|
|
|
latch->is_set = false; |
|
|
|
|
latch->owner_pid = MyProcPid; |
|
|
|
@ -257,7 +257,7 @@ InitLatch(volatile Latch *latch) |
|
|
|
|
* process references to postmaster-private latches or WaitEventSets. |
|
|
|
|
*/ |
|
|
|
|
void |
|
|
|
|
InitSharedLatch(volatile Latch *latch) |
|
|
|
|
InitSharedLatch(Latch *latch) |
|
|
|
|
{ |
|
|
|
|
#ifdef WIN32 |
|
|
|
|
SECURITY_ATTRIBUTES sa; |
|
|
|
@ -293,7 +293,7 @@ InitSharedLatch(volatile Latch *latch) |
|
|
|
|
* as shared latches use SIGUSR1 for inter-process communication. |
|
|
|
|
*/ |
|
|
|
|
void |
|
|
|
|
OwnLatch(volatile Latch *latch) |
|
|
|
|
OwnLatch(Latch *latch) |
|
|
|
|
{ |
|
|
|
|
/* Sanity checks */ |
|
|
|
|
Assert(latch->is_shared); |
|
|
|
@ -313,7 +313,7 @@ OwnLatch(volatile Latch *latch) |
|
|
|
|
* Disown a shared latch currently owned by the current process. |
|
|
|
|
*/ |
|
|
|
|
void |
|
|
|
|
DisownLatch(volatile Latch *latch) |
|
|
|
|
DisownLatch(Latch *latch) |
|
|
|
|
{ |
|
|
|
|
Assert(latch->is_shared); |
|
|
|
|
Assert(latch->owner_pid == MyProcPid); |
|
|
|
@ -341,7 +341,7 @@ DisownLatch(volatile Latch *latch) |
|
|
|
|
* we return all of them in one call, but we will return at least one. |
|
|
|
|
*/ |
|
|
|
|
int |
|
|
|
|
WaitLatch(volatile Latch *latch, int wakeEvents, long timeout, |
|
|
|
|
WaitLatch(Latch *latch, int wakeEvents, long timeout, |
|
|
|
|
uint32 wait_event_info) |
|
|
|
|
{ |
|
|
|
|
return WaitLatchOrSocket(latch, wakeEvents, PGINVALID_SOCKET, timeout, |
|
|
|
@ -366,7 +366,7 @@ WaitLatch(volatile Latch *latch, int wakeEvents, long timeout, |
|
|
|
|
* WaitEventSet instead; that's more efficient. |
|
|
|
|
*/ |
|
|
|
|
int |
|
|
|
|
WaitLatchOrSocket(volatile Latch *latch, int wakeEvents, pgsocket sock, |
|
|
|
|
WaitLatchOrSocket(Latch *latch, int wakeEvents, pgsocket sock, |
|
|
|
|
long timeout, uint32 wait_event_info) |
|
|
|
|
{ |
|
|
|
|
int ret = 0; |
|
|
|
@ -381,7 +381,7 @@ WaitLatchOrSocket(volatile Latch *latch, int wakeEvents, pgsocket sock, |
|
|
|
|
|
|
|
|
|
if (wakeEvents & WL_LATCH_SET) |
|
|
|
|
AddWaitEventToSet(set, WL_LATCH_SET, PGINVALID_SOCKET, |
|
|
|
|
(Latch *) latch, NULL); |
|
|
|
|
latch, NULL); |
|
|
|
|
|
|
|
|
|
/* Postmaster-managed callers must handle postmaster death somehow. */ |
|
|
|
|
Assert(!IsUnderPostmaster || |
|
|
|
@ -433,7 +433,7 @@ WaitLatchOrSocket(volatile Latch *latch, int wakeEvents, pgsocket sock, |
|
|
|
|
* throwing an error is not a good idea. |
|
|
|
|
*/ |
|
|
|
|
void |
|
|
|
|
SetLatch(volatile Latch *latch) |
|
|
|
|
SetLatch(Latch *latch) |
|
|
|
|
{ |
|
|
|
|
#ifndef WIN32 |
|
|
|
|
pid_t owner_pid; |
|
|
|
@ -516,7 +516,7 @@ SetLatch(volatile Latch *latch) |
|
|
|
|
* the latch is set again before the WaitLatch call. |
|
|
|
|
*/ |
|
|
|
|
void |
|
|
|
|
ResetLatch(volatile Latch *latch) |
|
|
|
|
ResetLatch(Latch *latch) |
|
|
|
|
{ |
|
|
|
|
/* Only the owner should reset the latch */ |
|
|
|
|
Assert(latch->owner_pid == MyProcPid); |
|
|
|
|