lib/workers/task_group.rb in workers-0.6.0 vs lib/workers/task_group.rb in workers-0.6.1
- old
+ new
@@ -40,11 +40,17 @@
@internal_lock.synchronize do
@tasks.each do |task|
@pool.perform { task.run }
end
- @conditional.wait(@internal_lock)
+ loop do
+ @conditional.wait(@internal_lock)
+ # The wait can return even if nothing called @conditional.signal,
+ # so we need to check to see if the condition actually changed.
+ # See https://github.com/chadrem/workers/issues/7
+ break if all_tasks_finished?
+ end
end
@tasks.all? { |t| t.succeeded? }
end
@@ -96,12 +102,16 @@
end
def finished(task)
@internal_lock.synchronize do
@finished_count += 1
- @conditional.signal if @finished_count >= @tasks.count
+ @conditional.signal if all_tasks_finished?
end
nil
+ end
+
+ def all_tasks_finished?
+ @finished_count >= @tasks.count
end
end
end