Skip to content

Commit 4addd64

Browse files
committed
catch exception when updating entries
1 parent 949e4eb commit 4addd64

1 file changed

Lines changed: 15 additions & 4 deletions

File tree

agent/update/src/main/java/me/hsgamer/topper/agent/update/UpdateAgent.java

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
import java.util.Iterator;
99
import java.util.Map;
10+
import java.util.NoSuchElementException;
1011
import java.util.Optional;
1112
import java.util.concurrent.ConcurrentHashMap;
1213
import java.util.concurrent.atomic.AtomicReference;
@@ -48,8 +49,13 @@ public Runnable getUpdateRunnable(int maxEntryPerCall) {
4849
public void run() {
4950
Iterator<Map.Entry<K, UpdateStatus>> iterator = iteratorRef.updateAndGet(old -> old == null || !old.hasNext() ? map.entrySet().iterator() : old);
5051
int count = 0;
51-
while (iterator.hasNext() && count < maxEntryPerCall) {
52-
Map.Entry<K, UpdateStatus> entry = iterator.next();
52+
while (count < maxEntryPerCall) {
53+
Map.Entry<K, UpdateStatus> entry;
54+
try {
55+
entry = iterator.next();
56+
} catch (NoSuchElementException e) {
57+
break;
58+
}
5359
K key = entry.getKey();
5460
UpdateStatus updateStatus = entry.getValue();
5561

@@ -102,8 +108,13 @@ public Runnable getSetRunnable() {
102108
@Override
103109
public void run() {
104110
Iterator<Map.Entry<K, UpdateStatus>> iterator = iteratorRef.updateAndGet(old -> old == null || !old.hasNext() ? map.entrySet().iterator() : old);
105-
while (iterator.hasNext()) {
106-
Map.Entry<K, UpdateStatus> entry = iterator.next();
111+
while (true) {
112+
Map.Entry<K, UpdateStatus> entry;
113+
try {
114+
entry = iterator.next();
115+
} catch (NoSuchElementException e) {
116+
break;
117+
}
107118
UpdateStatus updateStatus = entry.getValue();
108119

109120
if (updateStatus != UpdateStatus.RESET && !(updateStatus instanceof UpdateStatus.Set)) {

0 commit comments

Comments
 (0)