class Pwrake::FiberQueue
Public Class Methods
new(log=nil)
click to toggle source
# File lib/pwrake/branch/fiber_queue.rb, line 10 def initialize(log=nil) @q = [] @waiter = [] @finished = false @log = log end
Public Instance Methods
deq()
click to toggle source
# File lib/pwrake/branch/fiber_queue.rb, line 26 def deq while @q.empty? return nil if @finished @waiter.push(Fiber.current) Fiber.yield end return @q.shift end
deq_nonblock()
click to toggle source
# File lib/pwrake/branch/fiber_queue.rb, line 35 def deq_nonblock @q.shift end
enq(x)
click to toggle source
# File lib/pwrake/branch/fiber_queue.rb, line 17 def enq(x) if @finished raise FiberQueueError,"cannot enq to already finished queue" end @q.push(x) f = @waiter.shift f.resume if f end
finish()
click to toggle source
# File lib/pwrake/branch/fiber_queue.rb, line 39 def finish @finished = true while f = @waiter.shift begin f.resume rescue => exc if @log @log.error(([exc.to_s]+exc.backtrace).join("\n")) end end end end