Date: Tue, 10 Jul 2012 17:19:05 +0300 From: Volodymyr Kostyrko <c.kworr@gmail.com> To: Konstantin Belousov <kostikbel@gmail.com> Cc: "freebsd-hackers@freebsd.org" <freebsd-hackers@freebsd.org>, freebsd-standards@FreeBSD.org Subject: Re: kern/149857: [kqueue] kqueue not reporting EOF under certain circumstances Message-ID: <4FFC39D9.6080809@gmail.com> In-Reply-To: <20120710140203.GA2338@deviant.kiev.zoral.com.ua> References: <4FFC1D2D.4020405@gmail.com> <20120710140203.GA2338@deviant.kiev.zoral.com.ua>
next in thread | previous in thread | raw e-mail | index | archive | help
Konstantin Belousov wrote: >> This PR is rather old. I just had submitted new test case, now in plain c. >> >> It doesn't work exactly like python version, but the result is the same: >> >>> clang test.c >>> cat test.c | ./a.out >> -1 916 0 0 0 >> -1 0 32768 0 0 >>> ./a.out< test.c >> -1 916 0 0 0 >> <- and here we have a complete hang in [kqread]. > > And what is your expectation ? > > The vnode filter never returns EOF when current file position at the end > of file. It is documented that read filter returns when file offset if not > at the end of file, thats all. In fact, EV_EOF is returned on forced unmount. > I do not see a bug in kqueue. > > On the other hand, your C code has at least two things that I cannot > understand. First, EV_EOF is output flag, it makes absolutely no sense > to set it in command.Second, it is mistery for me what do you check with > if (kev.flags>> 15 == 1) { > test. EV_EOF on line 19 actually slipped by my fault, original source omits that one. It doesn't change anything. EV_EOF = 1 << 15 = 32768. And it _is_ returned when file is feed with the pipe. So you mean this is just my false assumption that EOF _should_ occur on stdin? And it actually occurs only if source is a process which can send EOF? -- Sphinx of black quartz judge my vow.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4FFC39D9.6080809>