Program: 91332
Project: 91332
Buggy source:
/** 
 * called from a remote node when it wishes to propagate a remove event
 */
private void remotePut(@NotNull final Bytes inBytes,int hash2,final byte identifier,final long timestamp,long valuePos,long valueLimit,long keyPosition,long keyLimit){
  lock();
  try {
    final long keyLen=keyLimit - keyPosition;
    hashLookupLiveAndDeleted.startSearch(hash2);
    for (int pos; (pos=hashLookupLiveAndDeleted.nextPos()) >= 0; ) {
      inBytes.limit(keyLimit);
      inBytes.position(keyPosition);
      long offset=offsetFromPos(pos);
      NativeBytes entry=entry(offset);
      if (!keyEquals(inBytes,keyLen,entry))       continue;
      entry.skip(keyLen);
      final long timeStampPos=entry.positionAddr();
      entry.positionAddr(timeStampPos);
      if (shouldIgnore(entry,timestamp,identifier)) {
        entry.positionAddr(timeStampPos);
        return;
      }
      boolean wasDeleted=entry.readBoolean();
      entry.positionAddr(timeStampPos);
      entry.writeLong(timestamp);
      if (identifier <= 0)       throw new IllegalStateException("String_Node_Str" + identifier);
      entry.writeByte(identifier);
      entry.writeBoolean(false);
      long valueLenPos=entry.position();
      long valueLen=readValueLen(entry);
      long entryEndAddr=entry.positionAddr() + valueLen;
      inBytes.limit(valueLimit);
      inBytes.position(valuePos);
      putValue(pos,offset,entry,valueLenPos,entryEndAddr,inBytes,null,true);
      if (wasDeleted) {
        hashLookupLiveOnly.put(hash2,pos);
        incrementSize();
      }
      return;
    }
    long valueLen=valueLimit - valuePos;
    int pos=alloc(inBlocks(entrySize(keyLen,valueLen)));
    long offset=offsetFromPos(pos);
    clearMetaData(offset);
    NativeBytes entry=entry(offset);
    entry.writeStopBit(keyLen);
    inBytes.limit(keyLimit);
    inBytes.position(keyPosition);
    entry.write(inBytes);
    entry.writeLong(timestamp);
    entry.writeByte(identifier);
    entry.writeBoolean(false);
    entry.writeStopBit(valueLen);
    alignment.alignPositionAddr(entry);
    inBytes.limit(valueLimit);
    inBytes.position(valuePos);
    entry.write(inBytes);
    hashLookupLiveAndDeleted.putAfterFailedSearch(pos);
    hashLookupLiveOnly.put(hash2,pos);
    incrementSize();
  }
  finally {
    unlock();
  }
}

Fixed version (ground truth):
/** 
 * called from a remote node when it wishes to propagate a remove event
 */
private void remotePut(@NotNull final Bytes inBytes,int hash2,final byte identifier,final long timestamp,long valuePos,long valueLimit,long keyPosition,long keyLimit){
  lock();
  try {
    final long keyLen=keyLimit - keyPosition;
    hashLookupLiveAndDeleted.startSearch(hash2);
    for (int pos; (pos=hashLookupLiveAndDeleted.nextPos()) >= 0; ) {
      inBytes.limit(keyLimit);
      inBytes.position(keyPosition);
      long offset=offsetFromPos(pos);
      NativeBytes entry=entry(offset);
      if (!keyEquals(inBytes,keyLen,entry))       continue;
      entry.skip(keyLen);
      final long timeStampPos=entry.positionAddr();
      entry.positionAddr(timeStampPos);
      if (shouldIgnore(entry,timestamp,identifier)) {
        entry.positionAddr(timeStampPos);
        return;
      }
      boolean wasDeleted=entry.readBoolean();
      entry.positionAddr(timeStampPos);
      entry.writeLong(timestamp);
      if (identifier <= 0)       throw new IllegalStateException("String_Node_Str" + identifier);
      entry.writeByte(identifier);
      entry.writeBoolean(false);
      long valueLenPos=entry.position();
      long valueLen=readValueLen(entry);
      long entryEndAddr=entry.positionAddr() + valueLen;
      inBytes.limit(valueLimit);
      inBytes.position(valuePos);
      putValue(pos,offset,entry,valueLenPos,entryEndAddr,inBytes,null,true,hashLookupLiveAndDeleted);
      if (wasDeleted) {
        hashLookupLiveOnly.put(hash2,pos);
        incrementSize();
      }
      return;
    }
    long valueLen=valueLimit - valuePos;
    int pos=alloc(inBlocks(entrySize(keyLen,valueLen)));
    long offset=offsetFromPos(pos);
    clearMetaData(offset);
    NativeBytes entry=entry(offset);
    entry.writeStopBit(keyLen);
    inBytes.limit(keyLimit);
    inBytes.position(keyPosition);
    entry.write(inBytes);
    entry.writeLong(timestamp);
    entry.writeByte(identifier);
    entry.writeBoolean(false);
    entry.writeStopBit(valueLen);
    alignment.alignPositionAddr(entry);
    inBytes.limit(valueLimit);
    inBytes.position(valuePos);
    entry.write(inBytes);
    hashLookupLiveAndDeleted.putAfterFailedSearch(pos);
    hashLookupLiveOnly.put(hash2,pos);
    incrementSize();
  }
  finally {
    unlock();
  }
}