From: Heikki Linnakangas Date: Sun, 15 Jan 2012 20:03:09 +0000 (+0200) Subject: Fix poll() implementation of WaitLatchOrSocket to notice postmaster death. X-Git-Tag: REL9_2_BETA1~581 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b2b4af535eb733ba0c2ea6eeb2b14cac7f1ca4be;p=postgresql Fix poll() implementation of WaitLatchOrSocket to notice postmaster death. When the remote end of the pipe is closed, select() reports the fd as readable, but poll() has a separate POLLHUP return code for that. Spotted by Peter Geoghegan. --- diff --git a/src/backend/port/unix_latch.c b/src/backend/port/unix_latch.c index fc1a579ad2..10bf2dbec7 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; }