From c3def649bcf4a9e3051ccd8dfa5273d7c53bdc8a Mon Sep 17 00:00:00 2001 From: Gonk Date: Sat, 29 Feb 2020 20:22:49 +0100 Subject: [PATCH] synchronized listeners to prevent crashs --- .../gpl/rpg/AndorsTrail/util/ListOfListeners.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/util/ListOfListeners.java b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/util/ListOfListeners.java index 6a8e5b808..c07f586a5 100644 --- a/AndorsTrail/src/com/gpl/rpg/AndorsTrail/util/ListOfListeners.java +++ b/AndorsTrail/src/com/gpl/rpg/AndorsTrail/util/ListOfListeners.java @@ -8,7 +8,7 @@ import com.gpl.rpg.AndorsTrail.AndorsTrailApplication; public class ListOfListeners { private final ArrayList> listeners = new ArrayList>(); - public final void add(T listener) { + public synchronized final void add(T listener) { if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) { for (WeakReference ref : listeners) { if (ref.get() == listener) { @@ -18,7 +18,7 @@ public class ListOfListeners { } listeners.add(new WeakReference(listener)); } - public final void remove(T listenerToRemove) { + public synchronized final void remove(T listenerToRemove) { for (int i = listeners.size()-1; i >= 0; --i) { T listener = listeners.get(i).get(); if (listener == null || listener == listenerToRemove) { @@ -26,32 +26,32 @@ public class ListOfListeners { } } } - public final void clear() { + public synchronized final void clear() { listeners.clear(); } - protected final void callAllListeners(Function e) { + protected synchronized final void callAllListeners(Function e) { for (int i = listeners.size()-1; i >= 0; --i) { T listener = listeners.get(i).get(); if (listener == null) listeners.remove(i); else e.call(listener); } } - protected final void callAllListeners(Function1 e, Arg1 arg) { + protected synchronized final void callAllListeners(Function1 e, Arg1 arg) { for (int i = listeners.size()-1; i >= 0; --i) { T listener = listeners.get(i).get(); if (listener == null) listeners.remove(i); else e.call(listener, arg); } } - protected final void callAllListeners(Function2 e, Arg1 arg1, Arg2 arg2) { + protected synchronized final void callAllListeners(Function2 e, Arg1 arg1, Arg2 arg2) { for (int i = listeners.size()-1; i >= 0; --i) { T listener = listeners.get(i).get(); if (listener == null) listeners.remove(i); else e.call(listener, arg1, arg2); } } - protected final void callAllListeners(Function3 e, Arg1 arg1, Arg2 arg2, Arg3 arg3) { + protected synchronized final void callAllListeners(Function3 e, Arg1 arg1, Arg2 arg2, Arg3 arg3) { for (int i = listeners.size()-1; i >= 0; --i) { T listener = listeners.get(i).get(); if (listener == null) listeners.remove(i);