diff --git a/src/main/java/net/openhft/chronicle/map/AbstractChronicleMapBuilder.java b/src/main/java/net/openhft/chronicle/map/AbstractChronicleMapBuilder.java index dfc923c3e..fc85c8710 100644 --- a/src/main/java/net/openhft/chronicle/map/AbstractChronicleMapBuilder.java +++ b/src/main/java/net/openhft/chronicle/map/AbstractChronicleMapBuilder.java @@ -754,12 +754,18 @@ public abstract class AbstractChronicleMapBuilder createPersistedTo(File file) throws IOException { - return createWithFile(file, singleHashReplication, null); + // clone() to make this builder instance thread-safe, because createWithFile() method + // computes some state based on configurations, but doesn't synchronize on configuration + // changes. + return clone().createWithFile(file, singleHashReplication, null); } @Override public ChronicleMap create() throws IOException { - return createWithoutFile(singleHashReplication, null); + // clone() to make this builder instance thread-safe, because createWithoutFile() method + // computes some state based on configurations, but doesn't synchronize on configuration + // changes. + return clone().createWithoutFile(singleHashReplication, null); } ChronicleMap create(InstanceConfig ib) throws IOException { @@ -812,7 +818,7 @@ public abstract class AbstractChronicleMapBuilder createWithoutFile( + ChronicleMap createWithoutFile( SingleChronicleHashReplication singleHashReplication, ReplicationChannel channel) throws IOException { VanillaChronicleMap map = newMap(singleHashReplication, channel); BytesStore bytesStore = new DirectStore(JDKObjectSerializer.INSTANCE,