Skip to content

Commit 2045f63

Browse files
authored
Merge pull request #43 from lmorda/master
Issue #40 - Unsubscribing a list of subscriptions causes ConcurrentModificationException
2 parents 14c468b + 9f7a618 commit 2045f63

File tree

1 file changed

+11
-7
lines changed

1 file changed

+11
-7
lines changed

lib/src/main/java/ua/naiksoftware/stomp/client/StompClient.java

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import java.util.Collections;
77
import java.util.HashMap;
88
import java.util.HashSet;
9+
import java.util.Iterator;
910
import java.util.List;
1011
import java.util.Map;
1112
import java.util.Set;
@@ -15,7 +16,6 @@
1516
import rx.Subscriber;
1617
import rx.Subscription;
1718
import rx.observables.ConnectableObservable;
18-
import rx.schedulers.Schedulers;
1919
import ua.naiksoftware.stomp.ConnectionProvider;
2020
import ua.naiksoftware.stomp.LifecycleEvent;
2121
import ua.naiksoftware.stomp.StompHeader;
@@ -171,14 +171,18 @@ public Observable<StompMessage> topic(String destinationPath, List<StompHeader>
171171
subscribersSet.add(subscriber);
172172

173173
}).doOnUnsubscribe(() -> {
174-
for (String dest : mSubscribers.keySet()) {
175-
Set<Subscriber<? super StompMessage>> set = mSubscribers.get(dest);
176-
for (Subscriber<? super StompMessage> subscriber : set) {
174+
Iterator<String> mapIterator = mSubscribers.keySet().iterator();
175+
while (mapIterator.hasNext()) {
176+
String destinationUrl = mapIterator.next();
177+
Set<Subscriber<? super StompMessage>> set = mSubscribers.get(destinationUrl);
178+
Iterator<Subscriber<? super StompMessage>> setIterator = set.iterator();
179+
while (setIterator.hasNext()) {
180+
Subscriber<? super StompMessage> subscriber = setIterator.next();
177181
if (subscriber.isUnsubscribed()) {
178-
set.remove(subscriber);
182+
setIterator.remove();
179183
if (set.size() < 1) {
180-
mSubscribers.remove(dest);
181-
unsubscribePath(dest).subscribe();
184+
mapIterator.remove();
185+
unsubscribePath(destinationUrl).subscribe();
182186
}
183187
}
184188
}

0 commit comments

Comments
 (0)