From ee5eb59e42a46baaab1668c6421a77b931293f2f Mon Sep 17 00:00:00 2001 From: Myles Date: Sun, 17 Mar 2019 16:04:13 +0000 Subject: [PATCH] Revert unnecessary synchronizes in ListWrapper Usually the list we're wrapping is synchronized, so instead we'll ensure our code can be run concurrently. There might be issues with other plugins and this change (but it's unlikely), open a issue if you see any of these after this change. --- .../bukkit/platform/BukkitViaInjector.java | 2 + .../us/myles/ViaVersion/util/ListWrapper.java | 47 ++++++++++--------- 2 files changed, 26 insertions(+), 23 deletions(-) diff --git a/bukkit/src/main/java/us/myles/ViaVersion/bukkit/platform/BukkitViaInjector.java b/bukkit/src/main/java/us/myles/ViaVersion/bukkit/platform/BukkitViaInjector.java index 29631778a..a9f07bc9d 100644 --- a/bukkit/src/main/java/us/myles/ViaVersion/bukkit/platform/BukkitViaInjector.java +++ b/bukkit/src/main/java/us/myles/ViaVersion/bukkit/platform/BukkitViaInjector.java @@ -22,6 +22,8 @@ import java.util.List; public class BukkitViaInjector implements ViaInjector { private List injectedFutures = new ArrayList<>(); private List> injectedLists = new ArrayList<>(); + private List injectedFutures = new ConcurrentList<>(); + private List> injectedLists = new ConcurrentList<>(); @Override public void inject() throws Exception { diff --git a/common/src/main/java/us/myles/ViaVersion/util/ListWrapper.java b/common/src/main/java/us/myles/ViaVersion/util/ListWrapper.java index f276d0eed..00e13278f 100644 --- a/common/src/main/java/us/myles/ViaVersion/util/ListWrapper.java +++ b/common/src/main/java/us/myles/ViaVersion/util/ListWrapper.java @@ -19,43 +19,44 @@ public abstract class ListWrapper implements List { } @Override - public synchronized int size() { + public int size() { return this.list.size(); } @Override - public synchronized boolean isEmpty() { + public boolean isEmpty() { return this.list.isEmpty(); } + @Override - public synchronized boolean contains(Object o) { + public boolean contains(Object o) { return this.list.contains(o); } @Override - public synchronized Iterator iterator() { + public Iterator iterator() { return listIterator(); } @Override - public synchronized Object[] toArray() { + public Object[] toArray() { return this.list.toArray(); } @Override - public synchronized boolean add(Object o) { + public boolean add(Object o) { handleAdd(o); return this.list.add(o); } @Override - public synchronized boolean remove(Object o) { + public boolean remove(Object o) { return this.list.remove(o); } @Override - public synchronized boolean addAll(Collection c) { + public boolean addAll(Collection c) { for (Object o : c) { handleAdd(o); } @@ -63,7 +64,7 @@ public abstract class ListWrapper implements List { } @Override - public synchronized boolean addAll(int index, Collection c) { + public boolean addAll(int index, Collection c) { for (Object o : c) { handleAdd(o); } @@ -71,72 +72,72 @@ public abstract class ListWrapper implements List { } @Override - public synchronized void clear() { + public void clear() { this.list.clear(); } @Override - public synchronized Object get(int index) { + public Object get(int index) { return this.list.get(index); } @Override - public synchronized Object set(int index, Object element) { + public Object set(int index, Object element) { return this.list.set(index, element); } @Override - public synchronized void add(int index, Object element) { + public void add(int index, Object element) { this.list.add(index, element); } @Override - public synchronized Object remove(int index) { + public Object remove(int index) { return this.list.remove(index); } @Override - public synchronized int indexOf(Object o) { + public int indexOf(Object o) { return this.list.indexOf(o); } @Override - public synchronized int lastIndexOf(Object o) { + public int lastIndexOf(Object o) { return this.list.lastIndexOf(o); } @Override - public synchronized ListIterator listIterator() { + public ListIterator listIterator() { return this.list.listIterator(); } @Override - public synchronized ListIterator listIterator(int index) { + public ListIterator listIterator(int index) { return this.list.listIterator(index); } @Override - public synchronized List subList(int fromIndex, int toIndex) { + public List subList(int fromIndex, int toIndex) { return this.list.subList(fromIndex, toIndex); } @Override - public synchronized boolean retainAll(Collection c) { + public boolean retainAll(Collection c) { return this.list.retainAll(c); } @Override - public synchronized boolean removeAll(Collection c) { + public boolean removeAll(Collection c) { return this.list.removeAll(c); } @Override - public synchronized boolean containsAll(Collection c) { + public boolean containsAll(Collection c) { return this.list.containsAll(c); } @Override - public synchronized Object[] toArray(Object[] a) { + public Object[] toArray(Object[] a) { return this.list.toArray(a); } }