module Polyphony::ChildFiberControl
Methods for controlling child fibers
Public Instance Methods
add_child(child_fiber)
click to toggle source
# File lib/polyphony/extensions/fiber.rb, line 198 def add_child(child_fiber) (@children ||= {})[child_fiber] = true end
attach_and_monitor(fiber)
click to toggle source
# File lib/polyphony/extensions/fiber.rb, line 252 def attach_and_monitor(fiber) @parent.remove_child(self) @parent = fiber fiber.add_child(self) monitor(fiber) end
attach_to(fiber)
click to toggle source
# File lib/polyphony/extensions/fiber.rb, line 246 def attach_to(fiber) @parent.remove_child(self) @parent = fiber fiber.add_child(self) end
await_all_children()
click to toggle source
# File lib/polyphony/extensions/fiber.rb, line 223 def await_all_children return unless @children && !@children.empty? Fiber.await(*@children.keys.reject { |c| c.dead? }) end
children()
click to toggle source
# File lib/polyphony/extensions/fiber.rb, line 194 def children (@children ||= {}).keys end
detach()
click to toggle source
# File lib/polyphony/extensions/fiber.rb, line 240 def detach @parent.remove_child(self) @parent = @thread.main_fiber @parent.add_child(self) end
remove_child(child_fiber)
click to toggle source
# File lib/polyphony/extensions/fiber.rb, line 202 def remove_child(child_fiber) @children.delete(child_fiber) if @children end
shutdown_all_children(graceful = false)
click to toggle source
# File lib/polyphony/extensions/fiber.rb, line 229 def shutdown_all_children(graceful = false) return unless @children @children.keys.each do |c| next if c.dead? c.terminate(graceful) c.await end end
spin(tag = nil, orig_caller = Kernel.caller, &block)
click to toggle source
# File lib/polyphony/extensions/fiber.rb, line 206 def spin(tag = nil, orig_caller = Kernel.caller, &block) f = Fiber.new { |v| f.run(v) } f.prepare(tag, block, orig_caller, self) (@children ||= {})[f] = true f end
terminate_all_children(graceful = false)
click to toggle source
# File lib/polyphony/extensions/fiber.rb, line 213 def terminate_all_children(graceful = false) return unless @children e = Polyphony::Terminate.new @children.each_key do |c| c.graceful_shutdown = true if graceful c.raise e end end