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.
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...).
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...).