Skip to content

Commit d0d8c39

Browse files
author
tramchamploo
authored
Merge pull request #11 from tramchamploo/fix
Fixed: CopyOnWriteArraySet.iterator doesn't support remove
2 parents 8a46dbc + d51bcef commit d0d8c39

File tree

2 files changed

+8
-8
lines changed

2 files changed

+8
-8
lines changed

boundedqueue/src/main/java/io/bufferslayer/AsyncReporter.java

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
import io.bufferslayer.OverflowStrategy.Strategy;
1212
import io.bufferslayer.internal.Component;
1313
import java.io.Flushable;
14-
import java.util.Iterator;
1514
import java.util.List;
1615
import java.util.Map;
1716
import java.util.concurrent.ConcurrentHashMap;
@@ -176,14 +175,11 @@ public AsyncReporter build() {
176175
}
177176
}
178177

179-
public int flushThreadCount() {
178+
int flushThreadCount() {
180179
int c = 0;
181-
for (Iterator<Thread> iter = flushThreads.iterator(); iter.hasNext(); ) {
182-
if (iter.next().isAlive()) {
183-
c++;
184-
} else {
185-
iter.remove();
186-
}
180+
for (Thread flushThread : flushThreads) {
181+
if (flushThread.isAlive()) c++;
182+
else flushThreads.remove(flushThread);
187183
}
188184
return c;
189185
}

boundedqueue/src/test/java/io/bufferslayer/AsyncReporterTest.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,10 +78,14 @@ public void flushThreadDieAfterKeepAlive() throws InterruptedException {
7878
.build();
7979
reporter.report(newMessage(0));
8080

81+
assertEquals(1, reporter.flushThreadCount());
82+
8183
countDown.await(50, TimeUnit.MILLISECONDS);
8284
// messageTimeout + flushThreadKeepalive
8385
Thread.sleep(TimeUnit.MILLISECONDS.toMillis(20));
8486
assertEquals(0, reporter.pendings.size());
87+
assertEquals(0, reporter.flushThreadCount()); // should remove dead thread
88+
assertEquals(0, reporter.flushThreads.size());
8589
}
8690

8791
@Test

0 commit comments

Comments
 (0)