File tree Expand file tree Collapse file tree 2 files changed +14
-2
lines changed Expand file tree Collapse file tree 2 files changed +14
-2
lines changed Original file line number Diff line number Diff line change @@ -21,7 +21,7 @@ def put(value)
2121 @mutex . synchronize do
2222 wait_while_full
2323 @buffer [ @last ] = value
24- @last += 1
24+ @last = ( @last + 1 ) % @buffer . size
2525 @count += 1
2626 @condition . signal
2727 end
@@ -32,7 +32,7 @@ def take
3232 wait_while_empty
3333 result = @buffer [ @first ]
3434 @buffer [ @first ] = nil
35- @first += 1
35+ @first = ( @first + 1 ) % @buffer . size
3636 @count -= 1
3737 @condition . signal
3838 result
Original file line number Diff line number Diff line change @@ -85,5 +85,17 @@ module Concurrent
8585 end
8686 end
8787
88+ context 'circular condition' do
89+ it 'can filled many times' do
90+ capacity . times { buffer . put 3 }
91+ capacity . times { buffer . take }
92+
93+ buffer . put 'hi'
94+
95+ buffer . take . should eq 'hi'
96+ buffer . capacity . should eq capacity
97+ end
98+ end
99+
88100 end
89101end
You can’t perform that action at this time.
0 commit comments