diff --git a/src/backend/port/unix_latch.c b/src/backend/port/unix_latch.c index fc1a579ad2a94e4768cad38f88f4d41127ba5647..10bf2dbec7ec052cb52d2ff286e46bd5039431d9 100644 --- a/src/backend/port/unix_latch.c +++ b/src/backend/port/unix_latch.c @@ -310,8 +310,13 @@ 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 & POLLIN)) + (pfds[nfds - 1].revents & (POLLHUP | POLLIN | POLLERR | POLLNVAL))) { result |= WL_POSTMASTER_DEATH; }