class Waiter
A linked list node used to track fibers waiting for IO events.
Definitions
def alive?
Signature
-
returns
Boolean | Nil Whether the waiting fiber is still alive.
Implementation
def alive?
self.fiber&.alive?
end
def dispatch(events, &reactivate)
Dispatch the given events to the list of waiting fibers. If the fiber was not waiting for the given events, it is reactivated by calling the given block.
Implementation
def dispatch(events, &reactivate)
# We capture the tail here, because calling reactivate might modify it:
tail = self.tail
if fiber = self.fiber
if fiber.alive?
revents = events & self.events
if revents.zero?
reactivate.call(self)
else
self.fiber = nil
fiber.transfer(revents)
end
else
self.fiber = nil
end
end
tail&.dispatch(events, &reactivate)
end
def invalidate
Clear the waiting fiber so it will not be resumed.
Implementation
def invalidate
self.fiber = nil
end
def each(&block)
Iterate over each active waiting fiber and its requested events.
Implementation
def each(&block)
if fiber = self.fiber
yield fiber, self.events
end
self.tail&.each(&block)
end