Commit 278584b5 authored by Peter Eisentraut's avatar Peter Eisentraut

Remove volatile from latch API

This was no longer useful since the latch functions use memory
barriers already, which are also compiler barriers, and volatile does
not help with cross-process access.

Discussion: https://www.postgresql.org/message-id/flat/20190218202511.qsfpuj5sy4dbezcw%40alap3.anarazel.de#18783c27d73e9e40009c82f6e0df0974
parent 754b90f6
...@@ -225,7 +225,7 @@ InitializeLatchSupport(void) ...@@ -225,7 +225,7 @@ InitializeLatchSupport(void)
* Initialize a process-local latch. * Initialize a process-local latch.
*/ */
void void
InitLatch(volatile Latch *latch) InitLatch(Latch *latch)
{ {
latch->is_set = false; latch->is_set = false;
latch->owner_pid = MyProcPid; latch->owner_pid = MyProcPid;
...@@ -257,7 +257,7 @@ InitLatch(volatile Latch *latch) ...@@ -257,7 +257,7 @@ InitLatch(volatile Latch *latch)
* process references to postmaster-private latches or WaitEventSets. * process references to postmaster-private latches or WaitEventSets.
*/ */
void void
InitSharedLatch(volatile Latch *latch) InitSharedLatch(Latch *latch)
{ {
#ifdef WIN32 #ifdef WIN32
SECURITY_ATTRIBUTES sa; SECURITY_ATTRIBUTES sa;
...@@ -293,7 +293,7 @@ InitSharedLatch(volatile Latch *latch) ...@@ -293,7 +293,7 @@ InitSharedLatch(volatile Latch *latch)
* as shared latches use SIGUSR1 for inter-process communication. * as shared latches use SIGUSR1 for inter-process communication.
*/ */
void void
OwnLatch(volatile Latch *latch) OwnLatch(Latch *latch)
{ {
/* Sanity checks */ /* Sanity checks */
Assert(latch->is_shared); Assert(latch->is_shared);
...@@ -313,7 +313,7 @@ OwnLatch(volatile Latch *latch) ...@@ -313,7 +313,7 @@ OwnLatch(volatile Latch *latch)
* Disown a shared latch currently owned by the current process. * Disown a shared latch currently owned by the current process.
*/ */
void void
DisownLatch(volatile Latch *latch) DisownLatch(Latch *latch)
{ {
Assert(latch->is_shared); Assert(latch->is_shared);
Assert(latch->owner_pid == MyProcPid); Assert(latch->owner_pid == MyProcPid);
...@@ -341,7 +341,7 @@ DisownLatch(volatile Latch *latch) ...@@ -341,7 +341,7 @@ DisownLatch(volatile Latch *latch)
* we return all of them in one call, but we will return at least one. * we return all of them in one call, but we will return at least one.
*/ */
int int
WaitLatch(volatile Latch *latch, int wakeEvents, long timeout, WaitLatch(Latch *latch, int wakeEvents, long timeout,
uint32 wait_event_info) uint32 wait_event_info)
{ {
return WaitLatchOrSocket(latch, wakeEvents, PGINVALID_SOCKET, timeout, return WaitLatchOrSocket(latch, wakeEvents, PGINVALID_SOCKET, timeout,
...@@ -366,7 +366,7 @@ WaitLatch(volatile Latch *latch, int wakeEvents, long timeout, ...@@ -366,7 +366,7 @@ WaitLatch(volatile Latch *latch, int wakeEvents, long timeout,
* WaitEventSet instead; that's more efficient. * WaitEventSet instead; that's more efficient.
*/ */
int int
WaitLatchOrSocket(volatile Latch *latch, int wakeEvents, pgsocket sock, WaitLatchOrSocket(Latch *latch, int wakeEvents, pgsocket sock,
long timeout, uint32 wait_event_info) long timeout, uint32 wait_event_info)
{ {
int ret = 0; int ret = 0;
...@@ -381,7 +381,7 @@ WaitLatchOrSocket(volatile Latch *latch, int wakeEvents, pgsocket sock, ...@@ -381,7 +381,7 @@ WaitLatchOrSocket(volatile Latch *latch, int wakeEvents, pgsocket sock,
if (wakeEvents & WL_LATCH_SET) if (wakeEvents & WL_LATCH_SET)
AddWaitEventToSet(set, WL_LATCH_SET, PGINVALID_SOCKET, AddWaitEventToSet(set, WL_LATCH_SET, PGINVALID_SOCKET,
(Latch *) latch, NULL); latch, NULL);
/* Postmaster-managed callers must handle postmaster death somehow. */ /* Postmaster-managed callers must handle postmaster death somehow. */
Assert(!IsUnderPostmaster || Assert(!IsUnderPostmaster ||
...@@ -433,7 +433,7 @@ WaitLatchOrSocket(volatile Latch *latch, int wakeEvents, pgsocket sock, ...@@ -433,7 +433,7 @@ WaitLatchOrSocket(volatile Latch *latch, int wakeEvents, pgsocket sock,
* throwing an error is not a good idea. * throwing an error is not a good idea.
*/ */
void void
SetLatch(volatile Latch *latch) SetLatch(Latch *latch)
{ {
#ifndef WIN32 #ifndef WIN32
pid_t owner_pid; pid_t owner_pid;
...@@ -516,7 +516,7 @@ SetLatch(volatile Latch *latch) ...@@ -516,7 +516,7 @@ SetLatch(volatile Latch *latch)
* the latch is set again before the WaitLatch call. * the latch is set again before the WaitLatch call.
*/ */
void void
ResetLatch(volatile Latch *latch) ResetLatch(Latch *latch)
{ {
/* Only the owner should reset the latch */ /* Only the owner should reset the latch */
Assert(latch->owner_pid == MyProcPid); Assert(latch->owner_pid == MyProcPid);
......
...@@ -156,12 +156,12 @@ typedef struct WaitEventSet WaitEventSet; ...@@ -156,12 +156,12 @@ typedef struct WaitEventSet WaitEventSet;
* prototypes for functions in latch.c * prototypes for functions in latch.c
*/ */
extern void InitializeLatchSupport(void); extern void InitializeLatchSupport(void);
extern void InitLatch(volatile Latch *latch); extern void InitLatch(Latch *latch);
extern void InitSharedLatch(volatile Latch *latch); extern void InitSharedLatch(Latch *latch);
extern void OwnLatch(volatile Latch *latch); extern void OwnLatch(Latch *latch);
extern void DisownLatch(volatile Latch *latch); extern void DisownLatch(Latch *latch);
extern void SetLatch(volatile Latch *latch); extern void SetLatch(Latch *latch);
extern void ResetLatch(volatile Latch *latch); extern void ResetLatch(Latch *latch);
extern WaitEventSet *CreateWaitEventSet(MemoryContext context, int nevents); extern WaitEventSet *CreateWaitEventSet(MemoryContext context, int nevents);
extern void FreeWaitEventSet(WaitEventSet *set); extern void FreeWaitEventSet(WaitEventSet *set);
...@@ -172,9 +172,9 @@ extern void ModifyWaitEvent(WaitEventSet *set, int pos, uint32 events, Latch *la ...@@ -172,9 +172,9 @@ extern void ModifyWaitEvent(WaitEventSet *set, int pos, uint32 events, Latch *la
extern int WaitEventSetWait(WaitEventSet *set, long timeout, extern int WaitEventSetWait(WaitEventSet *set, long timeout,
WaitEvent *occurred_events, int nevents, WaitEvent *occurred_events, int nevents,
uint32 wait_event_info); uint32 wait_event_info);
extern int WaitLatch(volatile Latch *latch, int wakeEvents, long timeout, extern int WaitLatch(Latch *latch, int wakeEvents, long timeout,
uint32 wait_event_info); uint32 wait_event_info);
extern int WaitLatchOrSocket(volatile Latch *latch, int wakeEvents, extern int WaitLatchOrSocket(Latch *latch, int wakeEvents,
pgsocket sock, long timeout, uint32 wait_event_info); pgsocket sock, long timeout, uint32 wait_event_info);
/* /*
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment