From 580b6aba7813928603ec4ae82520abd5ed6d63d7 Mon Sep 17 00:00:00 2001 From: Rob Austin Date: Sun, 2 Nov 2014 23:18:58 +0000 Subject: [PATCH] HCOLL-155 cleaned up putOnClose --- .../chronicle/map/VanillaChronicleMap.java | 23 ++++++++++--------- .../chronicle/map/ChronicleMapTest.java | 6 +++-- 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/src/main/java/net/openhft/chronicle/map/VanillaChronicleMap.java b/src/main/java/net/openhft/chronicle/map/VanillaChronicleMap.java index 8ecd5accf..97d557fb3 100644 --- a/src/main/java/net/openhft/chronicle/map/VanillaChronicleMap.java +++ b/src/main/java/net/openhft/chronicle/map/VanillaChronicleMap.java @@ -412,15 +412,14 @@ class VanillaChronicleMap, V v = segment.acquireWithoutLock(copies, metaKeyInterop, keyInterop, key, value, segmentHash, lockTypeType == LockType.WRITE_LOCK); - lock.copies = copies; lock.metaKeyInterop = metaKeyInterop; lock.keyInterop = keyInterop; lock.segmentHash = segmentHash; + lock.value = null; - if (v == null && lockTypeType == LockType.WRITE_LOCK) { + if (!isNativeValueClass && lockTypeType == LockType.WRITE_LOCK && v == null) v = value; - } lock.value(v); lock.key(key); @@ -705,30 +704,30 @@ class VanillaChronicleMap, final MutableLockedEntry heapWriteUnlock = new WriteLocked() { - boolean dontPutOnClose; + private boolean putOnClose = true; + @Override public void close() { - if (copies != null && !dontPutOnClose) + if (putOnClose) putWithoutLock(copies, metaKeyInterop, keyInterop, key(), value(), segmentHash, true); copies = null; - dontPutOnClose = false; + putOnClose = true; + Segment.this.writeUnlock(); } @Override public void dontPutOnClose() { - dontPutOnClose = true; + putOnClose = false; } @Override public void removeEntry() { - dontPutOnClose = true; - if (copies != null) - removeWithoutLock(copies, metaKeyInterop, keyInterop, key(), null, segmentHash); - + putOnClose = false; + removeWithoutLock(copies, metaKeyInterop, keyInterop, key(), null, segmentHash); } @@ -1634,6 +1633,7 @@ class VanillaChronicleMap, KI keyInterop; long segmentHash; + private K key; private V value; @@ -1678,6 +1678,7 @@ class VanillaChronicleMap, private static abstract class WriteLocked extends MutableLockedEntry implements WriteContext { + } } diff --git a/src/test/java/net/openhft/chronicle/map/ChronicleMapTest.java b/src/test/java/net/openhft/chronicle/map/ChronicleMapTest.java index 29b618119..dcc2e9cb4 100644 --- a/src/test/java/net/openhft/chronicle/map/ChronicleMapTest.java +++ b/src/test/java/net/openhft/chronicle/map/ChronicleMapTest.java @@ -1374,12 +1374,14 @@ public class ChronicleMapTest { } try (WriteContext context = map.acquireUsingLocked("one", value)) { - context.value().addValue(1); + LongValue value1 = context.value(); + value1.addValue(1); } // check that the entry was removed try (ReadContext context = map.getUsingLocked("one", value)) { - assertEquals(2, context.value().getValue()); + LongValue value1 = context.value(); + assertEquals(2, value1.getValue()); } map.close();