diff --git a/src/sample/OverflowableTransferQueue.java b/src/sample/OverflowableTransferQueue.java index e872fb5e..24f4b949 100644 --- a/src/sample/OverflowableTransferQueue.java +++ b/src/sample/OverflowableTransferQueue.java @@ -55,15 +55,14 @@ public class OverflowableTransferQueue { if(!mOverflow) { - if(mCounter.get() > mMaximumSize) + mQueue.offer(e); + + int size = mCounter.incrementAndGet(); + + if(size > mMaximumSize) { setOverflow(true); } - else - { - mQueue.offer(e); - mCounter.incrementAndGet(); - } } } @@ -76,7 +75,12 @@ public class OverflowableTransferQueue if(drainCount > 0) { - mCounter.addAndGet(-drainCount); + int size = mCounter.addAndGet(-drainCount); + + if(mOverflow && size <= mResetThreshold) + { + setOverflow(false); + } } return drainCount;