From c5e505525d8650d08d0cf17d15cc56b06fc44b88 Mon Sep 17 00:00:00 2001 From: leventov Date: Sun, 1 Nov 2015 13:58:55 +0300 Subject: [PATCH] Fix a possible bug in ReplicatedMapAbsent.doInsert() --- .../map/impl/stage/query/ReplicatedMapAbsent.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/openhft/chronicle/map/impl/stage/query/ReplicatedMapAbsent.java b/src/main/java/net/openhft/chronicle/map/impl/stage/query/ReplicatedMapAbsent.java index d3858c277..3db29ebbc 100644 --- a/src/main/java/net/openhft/chronicle/map/impl/stage/query/ReplicatedMapAbsent.java +++ b/src/main/java/net/openhft/chronicle/map/impl/stage/query/ReplicatedMapAbsent.java @@ -35,22 +35,26 @@ public abstract class ReplicatedMapAbsent extends MapAbsent { @Override public void doInsert(Data value) { q.putPrefix(); + // TODO relax locks only after spec completion and analysis + s.innerUpdateLock.lock(); if (!q.entryPresent()) { if (!ks.searchStatePresent()) { putEntry(value); + e.updatedReplicationStateOnAbsentEntry(); ks.setSearchState(PRESENT); q.initPresenceOfEntry(EntryPresence.PRESENT); } else { e.innerDefaultReplaceValue(value); + e.updatedReplicationStateOnPresentEntry(); s.deleted(s.deleted() - 1); } s.incrementModCount(); e.writeEntryPresent(); ru.updateChange(); - e.updatedReplicationStateOnAbsentEntry(); e.checksumStrategy.computeAndStoreChecksum(); } else { - throw new IllegalStateException("Entry is absent in the map when doInsert() is called"); + throw new IllegalStateException( + "Entry is present in the map when doInsert() is called"); } } }