diff --git a/src/main/java/com/recom/observer/Subject.java b/src/main/java/com/recom/observer/Subject.java index 2cc97f49..e36d6876 100644 --- a/src/main/java/com/recom/observer/Subject.java +++ b/src/main/java/com/recom/observer/Subject.java @@ -23,7 +23,9 @@ public void observationStoppedThrough(final @NonNull Observing observer) { @Override public void notifyObserversWith(@NonNull final Notification notification) { - observersWatchingMe.forEach(observer -> observer.takeNotice(this, notification)); + // run through a copy of the list to avoid ConcurrentModificationException when removing observers! + final List> copiedObserversWatchingMe = new ArrayList<>(observersWatchingMe); + copiedObserversWatchingMe.forEach(observer -> observer.takeNotice(this, notification)); } @Override diff --git a/src/main/java/com/recom/service/messagebus/MessageLongPollObserver.java b/src/main/java/com/recom/service/messagebus/MessageLongPollObserver.java index e1f853e7..3dc16254 100644 --- a/src/main/java/com/recom/service/messagebus/MessageLongPollObserver.java +++ b/src/main/java/com/recom/service/messagebus/MessageLongPollObserver.java @@ -67,6 +67,7 @@ public void takeNotice( responseBodyEmitter.completeWithError(e); } finally { responseBodyEmitter.complete(); + subject.observationStoppedThrough(this); } }