From acc616c204c034a73c66f91461cd3fe68883415b Mon Sep 17 00:00:00 2001 From: catbref Date: Thu, 10 Dec 2020 11:55:06 +0000 Subject: [PATCH] Add defensive code to EventBus to catch unexpected exceptions --- src/main/java/org/qortal/event/EventBus.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/qortal/event/EventBus.java b/src/main/java/org/qortal/event/EventBus.java index 09496d11..6114c2c6 100644 --- a/src/main/java/org/qortal/event/EventBus.java +++ b/src/main/java/org/qortal/event/EventBus.java @@ -3,9 +3,14 @@ package org.qortal.event; import java.util.ArrayList; import java.util.List; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + public enum EventBus { INSTANCE; + private static final Logger LOGGER = LogManager.getLogger(EventBus.class); + private static final List LISTENERS = new ArrayList<>(); public void addListener(Listener newListener) { @@ -50,6 +55,11 @@ public enum EventBus { } for (Listener listener : clonedListeners) - listener.listen(event); + try { + listener.listen(event); + } catch (Exception e) { + // We don't want one listener to break other listeners, or caller + LOGGER.warn(() -> String.format("Caught %s from a listener processing %s", e.getClass().getSimpleName(), event.getClass().getSimpleName()), e); + } } }