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.
{
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;
}