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