From dc4b578bef405677342dd9411c29fa20910dd00d Mon Sep 17 00:00:00 2001 From: leventov Date: Sun, 28 Feb 2016 21:32:11 +0700 Subject: [PATCH] Lock the segment on the write level right away in HashQuery.doRemove() --- .../openhft/chronicle/hash/impl/stage/query/HashQuery.java | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/main/java/net/openhft/chronicle/hash/impl/stage/query/HashQuery.java b/src/main/java/net/openhft/chronicle/hash/impl/stage/query/HashQuery.java index 0bda55f0e..85db31da1 100644 --- a/src/main/java/net/openhft/chronicle/hash/impl/stage/query/HashQuery.java +++ b/src/main/java/net/openhft/chronicle/hash/impl/stage/query/HashQuery.java @@ -129,15 +129,12 @@ public abstract class HashQuery implements SetEntry { @Override public void doRemove() { checkOnEachPublicOperation.checkOnEachPublicOperation(); - s.innerUpdateLock.lock(); + s.innerWriteLock.lock(); if (ks.searchStatePresent()) { entry.innerRemoveEntryExceptHashLookupUpdate(); + hashLookupSearch.remove(); ks.setSearchState(ABSENT); initPresenceOfEntry(EntryPresence.ABSENT); - - // write lock scope is reduced as much as possible - s.innerWriteLock.lock(); - hashLookupSearch.remove(); } else { throw new IllegalStateException("Entry is absent when doRemove() is called"); }