From 79f4be3941c0ff8791b5056cc0b38a5a2b2d50bb Mon Sep 17 00:00:00 2001 From: dordsor21 Date: Thu, 2 Sep 2021 18:06:36 +0100 Subject: [PATCH] Adjust some synchronisation --- .../implementation/blocks/CharBlocks.java | 30 ++++++++++--------- .../implementation/blocks/CharGetBlocks.java | 2 +- 2 files changed, 17 insertions(+), 15 deletions(-) diff --git a/worldedit-core/src/main/java/com/fastasyncworldedit/core/queue/implementation/blocks/CharBlocks.java b/worldedit-core/src/main/java/com/fastasyncworldedit/core/queue/implementation/blocks/CharBlocks.java index 5665c8789..53950b614 100644 --- a/worldedit-core/src/main/java/com/fastasyncworldedit/core/queue/implementation/blocks/CharBlocks.java +++ b/worldedit-core/src/main/java/com/fastasyncworldedit/core/queue/implementation/blocks/CharBlocks.java @@ -31,29 +31,31 @@ public abstract class CharBlocks implements IBlocks { }; protected final Section empty = new Section() { @Override - public synchronized char[] get(CharBlocks blocks, int layer) { + public char[] get(CharBlocks blocks, int layer) { // Defaults to aggressive as it should only be avoided where we know we've reset a chunk during an edit return get(blocks, layer, true); } @Override - public synchronized char[] get(CharBlocks blocks, int layer, boolean aggressive) { - char[] arr = blocks.blocks[layer]; - if (arr == null) { - arr = blocks.blocks[layer] = blocks.update(layer, null, aggressive); + public char[] get(CharBlocks blocks, int layer, boolean aggressive) { + synchronized (this) { + char[] arr = blocks.blocks[layer]; if (arr == null) { - throw new IllegalStateException("Array cannot be null: " + blocks.getClass()); + arr = blocks.blocks[layer] = blocks.update(layer, null, aggressive); + if (arr == null) { + throw new IllegalStateException("Array cannot be null: " + blocks.getClass()); + } + } else { + blocks.blocks[layer] = blocks.update(layer, arr, aggressive); + if (blocks.blocks[layer] == null) { + throw new IllegalStateException("Array cannot be null (update): " + blocks.getClass()); + } } - } else { - blocks.blocks[layer] = blocks.update(layer, arr, aggressive); - if (blocks.blocks[layer] == null) { - throw new IllegalStateException("Array cannot be null (update): " + blocks.getClass()); + if (blocks.blocks[layer] != null) { + blocks.sections[layer] = FULL; } + return arr; } - if (blocks.blocks[layer] != null) { - blocks.sections[layer] = FULL; - } - return arr; } @Override diff --git a/worldedit-core/src/main/java/com/fastasyncworldedit/core/queue/implementation/blocks/CharGetBlocks.java b/worldedit-core/src/main/java/com/fastasyncworldedit/core/queue/implementation/blocks/CharGetBlocks.java index e443d6bd7..c7cc2aa6b 100644 --- a/worldedit-core/src/main/java/com/fastasyncworldedit/core/queue/implementation/blocks/CharGetBlocks.java +++ b/worldedit-core/src/main/java/com/fastasyncworldedit/core/queue/implementation/blocks/CharGetBlocks.java @@ -24,7 +24,7 @@ public abstract class CharGetBlocks extends CharBlocks implements IChunkGet { } @Override - public boolean trim(boolean aggressive) { + public synchronized boolean trim(boolean aggressive) { for (int i = 0; i < sectionCount; i++) { sections[i] = empty; blocks[i] = null;