From af0b76d3e7dd1ca650af3d44e181d0c5a496539c Mon Sep 17 00:00:00 2001 From: "Blue (Lukas Rieger)" Date: Thu, 4 Feb 2021 14:31:25 +0100 Subject: [PATCH] Syncronize blockidconfig with a readwritelock Fixes #135 --- .../bluemap/core/config/BlockIdConfig.java | 116 +++++++++++------- 1 file changed, 72 insertions(+), 44 deletions(-) diff --git a/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/config/BlockIdConfig.java b/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/config/BlockIdConfig.java index dce7cb09..104db897 100644 --- a/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/config/BlockIdConfig.java +++ b/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/config/BlockIdConfig.java @@ -24,24 +24,26 @@ */ package de.bluecolored.bluemap.core.config; -import java.io.IOException; -import java.util.Map; -import java.util.Map.Entry; -import java.util.concurrent.ConcurrentHashMap; - import com.google.common.base.Preconditions; - import de.bluecolored.bluemap.core.logger.Logger; import de.bluecolored.bluemap.core.mca.mapping.BlockIdMapper; import de.bluecolored.bluemap.core.world.BlockState; import ninja.leaping.configurate.ConfigurationNode; import ninja.leaping.configurate.loader.ConfigurationLoader; +import java.io.IOException; +import java.util.Map; +import java.util.Map.Entry; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.locks.ReentrantReadWriteLock; + public class BlockIdConfig implements BlockIdMapper { - private ConfigurationLoader autopoulationConfigLoader; - private Map numeralMappings; - private Map idMappings; + private final ConfigurationLoader autopoulationConfigLoader; + private final Map numeralMappings; + private final Map idMappings; + + private final ReentrantReadWriteLock lock; public BlockIdConfig(ConfigurationNode node) { this(node, null); @@ -50,8 +52,10 @@ public BlockIdConfig(ConfigurationNode node) { public BlockIdConfig(ConfigurationNode node, ConfigurationLoader autopoulationConfigLoader) { this.autopoulationConfigLoader = autopoulationConfigLoader; - numeralMappings = new ConcurrentHashMap<>(200, 0.5f, 8); - idMappings = new ConcurrentHashMap<>(200, 0.5f, 8); + this.numeralMappings = new ConcurrentHashMap<>(200, 0.5f, 8); + this.idMappings = new ConcurrentHashMap<>(200, 0.5f, 8); + + this.lock = new ReentrantReadWriteLock(); for (Entry e : node.getChildrenMap().entrySet()){ String key = e.getKey().toString(); @@ -94,69 +98,93 @@ public BlockIdConfig(ConfigurationNode node, ConfigurationLoader