poll()-ing a pipe descriptor, watching for POLLHUP

Vlad Galu dudu at dudu.ro
Wed Jun 3 13:10:56 UTC 2009


On Wed, Jun 3, 2009 at 3:35 PM, Vlad Galu <dudu at dudu.ro> wrote:
> On Wed, Jun 3, 2009 at 3:32 PM, Kostik Belousov <kostikbel at gmail.com> wrote:
>> On Wed, Jun 03, 2009 at 03:15:32PM +0300, Vlad Galu wrote:
>>> Hello,
>>>
>>> Please take a look at the attached code. Shouldn't poll() get a
>>> POLLHUP event when the child process exits, closing the write end of
>>> the pipe?
>>
>> It seems that you code forgot to close the write end of the pipe in
>> parent. Thus, pipe is referenced by another file descriptor from
>> the parent process, and you do not get close event.
>>
>
> Aaarhg! You're right! Sorry for the noise!
>

Hm, I was having an issue with an internal piece of software, but
never checked what kind of pipe caused the problem. Turns out it was a
FIFO, and I got bitten by the same bug described here:
http://lists.freebsd.org/pipermail/freebsd-bugs/2006-March/017591.html

The problem is that the reader process isn't notified when the writer
process exits or closes the FIFO fd...


More information about the freebsd-stable mailing list