On 01/10, Casey Dahlin wrote:Yes but the actual waitfd call could simply set O_NONBLOCK on the descriptor when it receive WNOHANG in the flags, and read the descriptor flags going forward.
Scott James Remnant wrote:
On Wed, 2009-01-07 at 18:19 +0100, Oleg Nesterov wrote:From the perspective of waitfd, the only difference between WNOHANG and
Please note that unlike other sys_...fd() syscalls, sys_waitfd()Definitely agree here, waitfd() doesn't need WNOHANG - we already have
doesn't allow to pass O_CLOEXEC. Looks like we need a separate
"flags" argument...
Also, ioctl(FIONBIO) or fcntl(O_NONBLOCK) have no effect on
waitfd, not very good.
I'd suggest to remove WNOHANG from waitfd_ctx->ops and treat
(->f_flags & O_NONBLOCK) as WNOHANG.
(can't resist, ->ops is not the best name ;)
ONONBLOCK.
That also solves one of the strangest behaves of waitid when you use
WNOHANG (it returns zero and you have to check whether it changed the
struct), now you just read() - if no child you get EAGAIN, if a child
you read a struct.
O_NONBLOCK is which argument you put the flags in.
No. Please see the note about ioctl/fcntl above.
Oleg.