-
Notifications
You must be signed in to change notification settings - Fork 234
Description
In #754 it was discovered that there are applications, such as vim, which set the exceptfds argument to the select and pselect functions. The man pages for these functions indicate that this argument corresponds to the POLLPRI argument to the poll function. Prior to #754 wasi-libc didn't define POLLPRI as a constant and also returned an ENOSYS error if exceptfds was set for either select or pselect. In #754 this behavior has now changed where POLLPRI is defined, select and pselect thread fds to poll with POLLPRI set, and poll has some handling now. Specifically in poll it effectively ignores POLLPRI unless everything is exclusively waiting on that event in which case ENOSYS is returned.
I'm opening this issue to have some further discussion of this and see if anyone else has thoughts on this as well. Specific questions I would have are:
-
Is anyone opposed to exposing
POLLPRIin wasi-libc? Personally I feel this is justified because we already can't statically rule out settingexceptfdsarguments inselectandpselect. We've also found additionally over time that it's easier to provide constants/functions than to not provide them at all and ask applications to work around the lack of posix/unix/etc functionality. (at least in some cases, not necessarily all). Nevertheless I wanted to pose the question here: does anyone feel strongly thatPOLLPRIshould not be exported by wasi-libc? -
Regardless of whether
POLLPRIis publicly exported or not, what should the behavior ofexceptfdsbe withselectandpselect? I still frame this in my head asPOLLPRIsinceselectandpselectare effectively justpollin a different veneer personally. In my opinion we should interpretPOLLPRIas effectively an event that never happens right now in wasi-libc since it's not hooked up to anything. The man page forPOLLPRIsays it's for things like TCP out-of-band data and some ioctl/tty things I don't know about, but nevertheless WASI has no concept of either of these. Given that I'd personally say that we should consider this as an event that basically never fires. -
If others agree with me that we should interpret
POLLPRIas an event that never fires (yet, there's an orthogonal open question of whether WASI should provide functionality to support this), then do others disagree with changing the behavior ofpoll? I'd say thatpollshould probably just ignorePOLLPRIentirely and it turns into a glorified version ofsleepif you happen to wait exclusively on things withPOLLPRI. Otherwise if you wait on a mixture ofPOLLPRIand other things it's just as-if thePOLLPRIthing never fired.
cc @paralin as the author of #754, and cc @sunfishcode as you might have thoughts on API-side of things here too.