NetBSD/OpenBSD compatibility for KQueue selector, some FreeBSD fixes #72
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
NetBSD/OpenBSD do not support EVFILT_USER. Use self-pipe trick already implemented for EPoll.
Fix two tests on NetBSD. One failed because NetBSD does not have bidirectional pipes (and did not return the expected errno). The other seems related to SIGCHLD timing.
Fix #process_wait failing erratically on BSDs. kevent() can return an EVFILT_PROC/NOTE_EXIT event before the process is ready to be picked up by a WNOHANG wait.
Types of Changes
Contribution
Notes
This is on top of the "main" branch, but it works well on top of "fix-file-descriptor-race" too.
There's a REALLY annoying issue with kevent() waiting on processes that are terminating but not "fully" terminated apparently. And the fix I found isn't pretty (but it works). I think it would be cleaner if ruby did a wait without WNOHANG later on for processes that we know are terminating. But that would be a lot more changes (right now WNOHANG is what makes it choose to not call back into the scheduler...).