diff --git a/src/main/java/net/openhft/chronicle/hash/serialization/internal/ByteableMarshaller.java b/src/main/java/net/openhft/chronicle/hash/serialization/internal/ByteableMarshaller.java index 6ccbaa1e8..3358adf89 100644 --- a/src/main/java/net/openhft/chronicle/hash/serialization/internal/ByteableMarshaller.java +++ b/src/main/java/net/openhft/chronicle/hash/serialization/internal/ByteableMarshaller.java @@ -146,7 +146,7 @@ public abstract class ByteableMarshaller try { if (toReuse == null) toReuse = getInstance(); - toReuse.bytes(bytes, bytes.position()); + setBytesAndOffset(toReuse, bytes); bytes.skip(size); return toReuse; } catch (Exception ex) { diff --git a/src/main/java/net/openhft/chronicle/hash/serialization/internal/DataValueBytesMarshallers.java b/src/main/java/net/openhft/chronicle/hash/serialization/internal/DataValueBytesMarshallers.java index fcf065a91..c12280146 100644 --- a/src/main/java/net/openhft/chronicle/hash/serialization/internal/DataValueBytesMarshallers.java +++ b/src/main/java/net/openhft/chronicle/hash/serialization/internal/DataValueBytesMarshallers.java @@ -492,7 +492,8 @@ public final class DataValueBytesMarshallers { sb.append(" if (toReuse == null)\n"); sb.append(" toReuse = getInstance();\n"); sb.append(" if (toReuse instanceof Byteable) {\n"); - sb.append(" ((Byteable) toReuse).bytes(bytes, bytes.position());\n"); + sb.append(" " + + "ByteableMarshaller.setBytesAndOffset(((Byteable) toReuse), bytes);\n"); sb.append(" bytes.skip(size);\n"); sb.append(" return toReuse;\n"); sb.append(" }\n"); diff --git a/src/main/java/net/openhft/chronicle/map/VanillaChronicleMap.java b/src/main/java/net/openhft/chronicle/map/VanillaChronicleMap.java index 4ec2001f4..58e103a2d 100755 --- a/src/main/java/net/openhft/chronicle/map/VanillaChronicleMap.java +++ b/src/main/java/net/openhft/chronicle/map/VanillaChronicleMap.java @@ -134,6 +134,7 @@ class VanillaChronicleMap, ///////////////////////////////////////////////// // Bytes Store (essentially, the base address) and serialization-dependent offsets transient BytesStore ms; + transient Bytes bytes; transient long headerSize; transient long segmentHeadersOffset; @@ -272,6 +273,7 @@ class VanillaChronicleMap, final void createMappedStoreAndSegments(BytesStore bytesStore) throws IOException { this.ms = bytesStore; + bytes = ms.bytes(); onHeaderCreated(); @@ -362,6 +364,8 @@ class VanillaChronicleMap, public void close() { if (ms == null) return; + bytes.release(); + bytes = null; ms.free(); ms = null; } diff --git a/src/main/java/net/openhft/chronicle/map/VanillaContext.java b/src/main/java/net/openhft/chronicle/map/VanillaContext.java index a1d182c7c..3e45bba02 100644 --- a/src/main/java/net/openhft/chronicle/map/VanillaContext.java +++ b/src/main/java/net/openhft/chronicle/map/VanillaContext.java @@ -1807,8 +1807,8 @@ class VanillaContext, final MultiStoreBytes reuse(MultiStoreBytes entry, long pos) { long offsetWithinEntrySpace = pos * m.chunkSize; - entry.storePositionAndSize(m.ms, entrySpaceOffset + offsetWithinEntrySpace, - m.segmentEntrySpaceInnerSize - offsetWithinEntrySpace); + entry.setBytesOffset(m.bytes, entrySpaceOffset + offsetWithinEntrySpace); + entry.limit(m.segmentEntrySpaceInnerSize - offsetWithinEntrySpace); entry.position(m.metaDataBytes); return entry; }