lib/performer.rb in performer-1.0.0 vs lib/performer.rb in performer-1.0.1

- old
+ new

@@ -20,10 +20,12 @@ def initialize @queue = Performer::Queue.new @running = true @thread = Thread.new(&method(:run_loop)) + + @current_task = nil @shutdown_task = Task.new(lambda do @running = false nil end) end @@ -78,32 +80,30 @@ private def run_loop while @running - open = @queue.deq do |task| - begin - task.call - rescue Performer::Task::Error - # No op. Allows cancelling scheduled tasks. - end - end + open = @queue.deq { |task| with_task(task, &:call) } if not open and @queue.empty? @running = false end end ensure @queue.close until @queue.empty? - @queue.deq do |task| - begin - task.cancel - rescue Performer::Task::Error - # Shutting down. Don't care. - end - end + @queue.deq { |task| with_task(task, &:cancel) } end + end + + def with_task(task) + @current_task = task + yield task + rescue Performer::Task::Error + # Performer calling task does not care if you cancelled + # task, or if you called task earlier. We skip it. + ensure + @current_task = nil end end require "performer/condition_variable" require "performer/queue"