forked from Qortal-Forker/qortal
Add defensive code to EventBus to catch unexpected exceptions
This commit is contained in:
@@ -3,9 +3,14 @@ package org.qortal.event;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
import org.apache.logging.log4j.Logger;
|
||||||
|
|
||||||
public enum EventBus {
|
public enum EventBus {
|
||||||
INSTANCE;
|
INSTANCE;
|
||||||
|
|
||||||
|
private static final Logger LOGGER = LogManager.getLogger(EventBus.class);
|
||||||
|
|
||||||
private static final List<Listener> LISTENERS = new ArrayList<>();
|
private static final List<Listener> LISTENERS = new ArrayList<>();
|
||||||
|
|
||||||
public void addListener(Listener newListener) {
|
public void addListener(Listener newListener) {
|
||||||
@@ -50,6 +55,11 @@ public enum EventBus {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (Listener listener : clonedListeners)
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user