When multiple fibers wait on different events for the same IO object and only a subset of the polled events happen, some of the fibers could be woken up prematurely (with a subset of the events they asked for) and dropped from the queue.
Fix by re-inserting the waiters into the IO object's queue when none of their events were triggered.
I tried to modify the existing code as little as possible to fix this, but it's really starting to make the per-IO queue handling way more complicated than it should be...
When multiple fibers wait on different events for the same IO object and only a subset of the polled events happen, some of the fibers could be woken up prematurely (with a subset of the events they asked for) and dropped from the queue.
Fix by re-inserting the waiters into the IO object's queue when none of their events were triggered.
Types of Changes
Contribution
I tried to modify the existing code as little as possible to fix this, but it's really starting to make the per-IO queue handling way more complicated than it should be...