diff --git a/lib/cc/engine/analyzers/file_thread_pool.rb b/lib/cc/engine/analyzers/file_thread_pool.rb index 971df120..33a4c531 100644 --- a/lib/cc/engine/analyzers/file_thread_pool.rb +++ b/lib/cc/engine/analyzers/file_thread_pool.rb @@ -14,10 +14,11 @@ def initialize(files, concurrency: DEFAULT_CONCURRENCY) def run(&block) queue = build_queue + lock = Mutex.new @workers = thread_count.times.map do Thread.new do - while !queue.empty? && (item = queue.pop(true)) + while (item = next_item(queue, lock)) yield item end end @@ -32,6 +33,10 @@ def join attr_reader :files, :concurrency, :workers + def next_item(queue, lock) + lock.synchronize { queue.pop(true) unless queue.empty? } + end + def build_queue Queue.new.tap do |queue| files.each do |file|