Skip to content

Commit 2974c08

Browse files
committed
Merge pull request #69 from codeclimate/will/thread-pool-race
Address FileThreadPool race condition
2 parents 67b9919 + 625a2d6 commit 2974c08

File tree

1 file changed

+6
-1
lines changed

1 file changed

+6
-1
lines changed

lib/cc/engine/analyzers/file_thread_pool.rb

+6-1
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,11 @@ def initialize(files, concurrency: DEFAULT_CONCURRENCY)
1414

1515
def run(&block)
1616
queue = build_queue
17+
lock = Mutex.new
1718

1819
@workers = thread_count.times.map do
1920
Thread.new do
20-
while !queue.empty? && (item = queue.pop(true))
21+
while (item = next_item(queue, lock))
2122
yield item
2223
end
2324
end
@@ -32,6 +33,10 @@ def join
3233

3334
attr_reader :files, :concurrency, :workers
3435

36+
def next_item(queue, lock)
37+
lock.synchronize { queue.pop(true) unless queue.empty? }
38+
end
39+
3540
def build_queue
3641
Queue.new.tap do |queue|
3742
files.each do |file|

0 commit comments

Comments
 (0)