Skip to content

Commit 1c8bef5

Browse files
committed
Issue #40 - Unsubscribing a list of subscriptions causes ConcurrentModificationException
1 parent 14c468b commit 1c8bef5

File tree

1 file changed

+4
-2
lines changed

1 file changed

+4
-2
lines changed

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
import rx.Subscriber;
1616
import rx.Subscription;
1717
import rx.observables.ConnectableObservable;
18-
import rx.schedulers.Schedulers;
1918
import ua.naiksoftware.stomp.ConnectionProvider;
2019
import ua.naiksoftware.stomp.LifecycleEvent;
2120
import ua.naiksoftware.stomp.StompHeader;
@@ -171,18 +170,21 @@ public Observable<StompMessage> topic(String destinationPath, List<StompHeader>
171170
subscribersSet.add(subscriber);
172171

173172
}).doOnUnsubscribe(() -> {
173+
Set<String> destSet = new HashSet<String>();
174174
for (String dest : mSubscribers.keySet()) {
175175
Set<Subscriber<? super StompMessage>> set = mSubscribers.get(dest);
176176
for (Subscriber<? super StompMessage> subscriber : set) {
177177
if (subscriber.isUnsubscribed()) {
178178
set.remove(subscriber);
179179
if (set.size() < 1) {
180-
mSubscribers.remove(dest);
180+
destSet.add(dest);
181181
unsubscribePath(dest).subscribe();
182182
}
183183
}
184184
}
185185
}
186+
for (String dest : destSet)
187+
mSubscribers.remove(dest);
186188
});
187189
}
188190

0 commit comments

Comments
 (0)