diff --git a/src/main/java/net/openhft/chronicle/hash/impl/stage/entry/UpdateLock.java b/src/main/java/net/openhft/chronicle/hash/impl/stage/entry/UpdateLock.java index 3c7b4a00b..35a765ab8 100644 --- a/src/main/java/net/openhft/chronicle/hash/impl/stage/entry/UpdateLock.java +++ b/src/main/java/net/openhft/chronicle/hash/impl/stage/entry/UpdateLock.java @@ -182,9 +182,8 @@ public class UpdateLock implements InterProcessLock { return; case UPDATE_LOCKED: entry.closeDelayedUpdateChecksum(); - if (s.decrementUpdate() == 0) { - if (s.writeZero()) - s.segmentHeader.downgradeUpdateToReadLock(s.segmentHeaderAddress); + if (s.decrementUpdate() == 0 && s.writeZero()) { + s.segmentHeader.downgradeUpdateToReadLock(s.segmentHeaderAddress); } break; case WRITE_LOCKED: 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 d7e14c7a2..3a8693a71 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 @@ -71,11 +71,9 @@ public abstract class HashQuery implements SetEntry { if (s.nestedContextsLockedOnSameSegment && s.rootContextLockedOnThisSegment.latestSameThreadSegmentModCount() != s.contextModCount) { - if (ks.keySearchInit()) { - if (ks.searchState == PRESENT) { - if (!hashLookupSearch.checkSlotContainsExpectedKeyAndValue(entry.pos)) - hlp.closeHashLookupPos(); - } + if (ks.keySearchInit() && ks.searchState == PRESENT && + !hashLookupSearch.checkSlotContainsExpectedKeyAndValue(entry.pos)) { + hlp.closeHashLookupPos(); } } } diff --git a/src/main/java/net/openhft/chronicle/map/impl/stage/entry/MapEntryStages.java b/src/main/java/net/openhft/chronicle/map/impl/stage/entry/MapEntryStages.java index 118c201b2..53b686a72 100644 --- a/src/main/java/net/openhft/chronicle/map/impl/stage/entry/MapEntryStages.java +++ b/src/main/java/net/openhft/chronicle/map/impl/stage/entry/MapEntryStages.java @@ -215,10 +215,9 @@ public abstract class MapEntryStages extends HashEntryStages boolean tierHasChanged = allocatedChunks.initEntryAndKeyCopying( entrySize, valueSizeOffset - keySizeOffset, pos, entrySizeInChunks); - if (tierHasChanged) { - // implicitly inits key search, locating hashLookupPos on the empty slot - if (!ks.searchStateAbsent()) - throw new AssertionError(); + // implicitly inits key search, locating hashLookupPos on the empty slot + if (tierHasChanged && !ks.searchStateAbsent()) { + throw new AssertionError(); } initValue(newValue);