class FiberRecycling::NormalFiberBackend
Attributes
variables[R]
Public Class Methods
finalizer(recycled_fiber_borrower)
click to toggle source
# File lib/fiber_recycling/normal_fiber_backend.rb, line 4 def self.finalizer(recycled_fiber_borrower) Proc.new { recycled_fiber_borrower.return } end
new(fiber, block)
click to toggle source
# File lib/fiber_recycling/normal_fiber_backend.rb, line 17 def initialize(fiber, block) @state = 'created' @variables = {} @recycled_fiber_borrower = RecycledFiberPool.local.borrower @recycled_fiber = @recycled_fiber_borrower.retrieve @recycled_fiber.run { execute(fiber, block) } ObjectSpace.define_finalizer(self, self.class.finalizer(@recycled_fiber_borrower)) end
yield(*args)
click to toggle source
# File lib/fiber_recycling/normal_fiber_backend.rb, line 8 def self.yield(*args) @state = 'suspended' return_value = RecycledFiber.yield(*args) @state = 'resumed' return_value end
Public Instance Methods
alive?()
click to toggle source
# File lib/fiber_recycling/normal_fiber_backend.rb, line 26 def alive? @state != 'terminated' end
inspect()
click to toggle source
# File lib/fiber_recycling/normal_fiber_backend.rb, line 30 def inspect to_s end
resume(*args)
click to toggle source
# File lib/fiber_recycling/normal_fiber_backend.rb, line 34 def resume(*args) raise FiberError, 'dead fiber called' unless alive? @recycled_fiber.resume(*args) end
to_s()
click to toggle source
# File lib/fiber_recycling/normal_fiber_backend.rb, line 39 def to_s "#<RecycledFiber::Fiber:#{object_hexid} (#{@state})>" end
transfer(*args)
click to toggle source
# File lib/fiber_recycling/normal_fiber_backend.rb, line 43 def transfer(*args) raise FiberError, 'dead fiber called' unless alive? @recycled_fiber.transfer(*args) end
Private Instance Methods
execute(fiber, block)
click to toggle source
# File lib/fiber_recycling/normal_fiber_backend.rb, line 50 def execute(fiber, block) args = RecycledFiber.yield Thread.current[:fiber_recycling__fiber] = fiber return_value = block.call(*args) Thread.current[:fiber_recycling__fiber] = nil @state = 'terminated' @recycled_fiber = nil @recycled_fiber_borrower.return return_value end