IO::EventSourceIOEventSelectorSelectWaiter

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