aboutsummaryrefslogtreecommitdiff
path: root/src/backend/port/unix_latch.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/port/unix_latch.c')
-rw-r--r--src/backend/port/unix_latch.c36
1 files changed, 19 insertions, 17 deletions
diff --git a/src/backend/port/unix_latch.c b/src/backend/port/unix_latch.c
index e64282c2105..65b2fc56e03 100644
--- a/src/backend/port/unix_latch.c
+++ b/src/backend/port/unix_latch.c
@@ -183,6 +183,7 @@ WaitLatchOrSocket(volatile Latch *latch, int wakeEvents, pgsocket sock,
{
int result = 0;
int rc;
+
#ifdef HAVE_POLL
struct pollfd pfds[3];
int nfds;
@@ -235,14 +236,15 @@ WaitLatchOrSocket(volatile Latch *latch, int wakeEvents, pgsocket sock,
*
* Note: we assume that the kernel calls involved in drainSelfPipe()
* and SetLatch() will provide adequate synchronization on machines
- * with weak memory ordering, so that we cannot miss seeing is_set
- * if the signal byte is already in the pipe when we drain it.
+ * with weak memory ordering, so that we cannot miss seeing is_set if
+ * the signal byte is already in the pipe when we drain it.
*/
drainSelfPipe();
if ((wakeEvents & WL_LATCH_SET) && latch->is_set)
{
result |= WL_LATCH_SET;
+
/*
* Leave loop immediately, avoid blocking again. We don't attempt
* to report any other events that might also be satisfied.
@@ -309,13 +311,14 @@ WaitLatchOrSocket(volatile Latch *latch, int wakeEvents, pgsocket sock,
{
result |= WL_SOCKET_WRITEABLE;
}
+
/*
* We expect a POLLHUP when the remote end is closed, but because we
* don't expect the pipe to become readable or to have any errors
* either, treat those as postmaster death, too.
*/
if ((wakeEvents & WL_POSTMASTER_DEATH) &&
- (pfds[nfds - 1].revents & (POLLHUP | POLLIN | POLLERR | POLLNVAL)))
+ (pfds[nfds - 1].revents & (POLLHUP | POLLIN | POLLERR | POLLNVAL)))
{
/*
* According to the select(2) man page on Linux, select(2) may
@@ -329,8 +332,7 @@ WaitLatchOrSocket(volatile Latch *latch, int wakeEvents, pgsocket sock,
if (!PostmasterIsAlive())
result |= WL_POSTMASTER_DEATH;
}
-
-#else /* !HAVE_POLL */
+#else /* !HAVE_POLL */
FD_ZERO(&input_mask);
FD_ZERO(&output_mask);
@@ -387,7 +389,7 @@ WaitLatchOrSocket(volatile Latch *latch, int wakeEvents, pgsocket sock,
result |= WL_SOCKET_WRITEABLE;
}
if ((wakeEvents & WL_POSTMASTER_DEATH) &&
- FD_ISSET(postmaster_alive_fds[POSTMASTER_FD_WATCH], &input_mask))
+ FD_ISSET(postmaster_alive_fds[POSTMASTER_FD_WATCH], &input_mask))
{
/*
* According to the select(2) man page on Linux, select(2) may
@@ -401,7 +403,7 @@ WaitLatchOrSocket(volatile Latch *latch, int wakeEvents, pgsocket sock,
if (!PostmasterIsAlive())
result |= WL_POSTMASTER_DEATH;
}
-#endif /* HAVE_POLL */
+#endif /* HAVE_POLL */
} while (result == 0);
waiting = false;
@@ -423,9 +425,9 @@ SetLatch(volatile Latch *latch)
pid_t owner_pid;
/*
- * XXX there really ought to be a memory barrier operation right here,
- * to ensure that any flag variables we might have changed get flushed
- * to main memory before we check/set is_set. Without that, we have to
+ * XXX there really ought to be a memory barrier operation right here, to
+ * ensure that any flag variables we might have changed get flushed to
+ * main memory before we check/set is_set. Without that, we have to
* require that callers provide their own synchronization for machines
* with weak memory ordering (see latch.h).
*/
@@ -450,12 +452,12 @@ SetLatch(volatile Latch *latch)
* Postgres; and PG database processes should handle excess SIGUSR1
* interrupts without a problem anyhow.
*
- * Another sort of race condition that's possible here is for a new process
- * to own the latch immediately after we look, so we don't signal it.
- * This is okay so long as all callers of ResetLatch/WaitLatch follow the
- * standard coding convention of waiting at the bottom of their loops,
- * not the top, so that they'll correctly process latch-setting events that
- * happen before they enter the loop.
+ * Another sort of race condition that's possible here is for a new
+ * process to own the latch immediately after we look, so we don't signal
+ * it. This is okay so long as all callers of ResetLatch/WaitLatch follow
+ * the standard coding convention of waiting at the bottom of their loops,
+ * not the top, so that they'll correctly process latch-setting events
+ * that happen before they enter the loop.
*/
owner_pid = latch->owner_pid;
if (owner_pid == 0)
@@ -484,7 +486,7 @@ ResetLatch(volatile Latch *latch)
/*
* XXX there really ought to be a memory barrier operation right here, to
* ensure that the write to is_set gets flushed to main memory before we
- * examine any flag variables. Otherwise a concurrent SetLatch might
+ * examine any flag variables. Otherwise a concurrent SetLatch might
* falsely conclude that it needn't signal us, even though we have missed
* seeing some flag updates that SetLatch was supposed to inform us of.
* For the moment, callers must supply their own synchronization of flag