From f7f539e2454e5827665b7b650c257e306e2290d7 Mon Sep 17 00:00:00 2001 From: Owain van Brakel Date: Sat, 27 Jul 2019 20:24:36 +0200 Subject: [PATCH] eventbus: Subbing twice shouldn't be possible --- .../main/java/net/runelite/client/eventbus/EventBus.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/runelite-client/src/main/java/net/runelite/client/eventbus/EventBus.java b/runelite-client/src/main/java/net/runelite/client/eventbus/EventBus.java index 12bba2da05..20fe04fff1 100644 --- a/runelite-client/src/main/java/net/runelite/client/eventbus/EventBus.java +++ b/runelite-client/src/main/java/net/runelite/client/eventbus/EventBus.java @@ -17,6 +17,7 @@ import org.apache.commons.lang3.exception.ExceptionUtils; @Singleton public class EventBus implements EventBusInterface { + private Map subscriptionList = new HashMap<>(); private Map, Relay> subjectList = new HashMap<>(); private Map subscriptionsMap = new HashMap<>(); @@ -43,6 +44,11 @@ public class EventBus implements EventBusInterface // Subscribe on lifecycle (for example from plugin startUp -> shutdown) public void subscribe(Class eventClass, @NonNull Object lifecycle, @NonNull Consumer action) { + if (subscriptionList.containsKey(lifecycle) && eventClass.equals(subscriptionList.get(lifecycle))) + { + return; + } + Disposable disposable = getSubject(eventClass) .filter(Objects::nonNull) // Filter out null objects, better safe than sorry .cast(eventClass) // Cast it for easier usage @@ -53,6 +59,7 @@ public class EventBus implements EventBusInterface }); getCompositeDisposable(lifecycle).add(disposable); + subscriptionList.put(lifecycle, eventClass); } @Override @@ -60,6 +67,7 @@ public class EventBus implements EventBusInterface { //We have to remove the composition from the map, because once you dispose it can't be used anymore CompositeDisposable compositeDisposable = subscriptionsMap.remove(lifecycle); + subscriptionList.remove(lifecycle); if (compositeDisposable != null) { compositeDisposable.dispose();