Tom Lane wrote:
> Andrew Dunstan <andrew@dunslane.net> writes:
>
>> Good catch. I am also a bit dubious about this code:
>>
>
>
>> input_fd.fd = pgStatSock;
>> input_fd.events = POLLIN | POLLERR;
>> input_fd.revents = 0;
>>
>
> Hm. The Single Unix Spec saith that POLLERR is ignored in the events
> field, but it is not clear to me that older systems might not treat it
> as a condition bit. For instance on HPUX the poll man page says only
>
> The condition flags POLLERR, POLLHUP, and POLLNVAL are always set in
> revents if the conditions they indicate are true for the specified
> file descriptor, whether or not these flags are set in events.
>
yeah.
http://www.opengroup.org/onlinepubs/009695399/functions/poll.html says:
"An error has occurred on the device or stream. This flag is only valid
in the /revents/ bitmask; it shall be ignored in the /events/ member."
>
>> AIUI you are not supposed to put POLLERR in the events field. We should
>> probably be setting POLLIN | POLLPRI, and we should also probably check
>> exactly what event was returned in revents.
>>
>
> We don't need to check what was returned because the action is the same
> either way: do a recv(). I'm not seeing the point of setting POLLPRI.
>
>
>
Maybe none in this case - I guess we're not sending priority data.
This might all be OK - I just noticed it as I was looking at the
problem, so I though I'd mention it. I have no doubt your fix is the
correct one, though.
cheers
andrew