Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
This repository was archived by the owner on Jul 19, 2025. It is now read-only.

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‎

Lines changed: 6 additions & 1 deletion
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)

AltStyle によって変換されたページ (->オリジナル) /