<div dir="ltr">Hi,<div><br></div><div>I am trying to get my head around to why you need </div><div><br></div><div> i >= n || i + n >= nextn </div><div>  <a href="https://github.com/openjdk/jdk/blob/af5bf81754072fa5879726cfacb7404892b553f0/src/java.base/share/classes/java/util/concurrent/ConcurrentHashMap.java#L2465">https://github.com/openjdk/jdk/blob/af5bf81754072fa5879726cfacb7404892b553f0/src/java.base/share/classes/java/util/concurrent/ConcurrentHashMap.java#L2465</a> <br clear="all"><div><br></div></div><div>in the transfer method of the CHM.</div><div><br></div><div><a href="https://github.com/openjdk/jdk/blob/af5bf81754072fa5879726cfacb7404892b553f0/src/java.base/share/classes/java/util/concurrent/ConcurrentHashMap.java#L2426">https://github.com/openjdk/jdk/blob/af5bf81754072fa5879726cfacb7404892b553f0/src/java.base/share/classes/java/util/concurrent/ConcurrentHashMap.java#L2426</a><br></div><div><br></div><div>The reasons why I think that this is not required is because :</div><div><br></div><div>1) At a time there can be only 1 active transfer. Since there is only one table variable and only one newTable variable.</div><div><br></div><div>2) transferIndex is always set to oldTable.length before a transfer() takes place</div><div><br></div><div><a href="https://github.com/openjdk/jdk/blob/af5bf81754072fa5879726cfacb7404892b553f0/src/java.base/share/classes/java/util/concurrent/ConcurrentHashMap.java#L2440">https://github.com/openjdk/jdk/blob/af5bf81754072fa5879726cfacb7404892b553f0/src/java.base/share/classes/java/util/concurrent/ConcurrentHashMap.java#L2440</a><br></div><div><div><br></div><div>3) transferIndex is always set to nextIndex - stride, nextIndex is always set to transferIndex which in turn is always set to n (oldTable.length)</div><div><br></div><div><a href="https://github.com/openjdk/jdk/blob/af5bf81754072fa5879726cfacb7404892b553f0/src/java.base/share/classes/java/util/concurrent/ConcurrentHashMap.java#L2456">https://github.com/openjdk/jdk/blob/af5bf81754072fa5879726cfacb7404892b553f0/src/java.base/share/classes/java/util/concurrent/ConcurrentHashMap.java#L2456</a><br></div><div><br></div><div><a href="https://github.com/openjdk/jdk/blob/af5bf81754072fa5879726cfacb7404892b553f0/src/java.base/share/classes/java/util/concurrent/ConcurrentHashMap.java#L2452">https://github.com/openjdk/jdk/blob/af5bf81754072fa5879726cfacb7404892b553f0/src/java.base/share/classes/java/util/concurrent/ConcurrentHashMap.java#L2452</a><br></div><div><br></div><div>4) All threads that modifies the CHM must help with the transfer() before finalizing the newTable</div><div><br></div><div><a href="https://github.com/openjdk/jdk/blob/af5bf81754072fa5879726cfacb7404892b553f0/src/java.base/share/classes/java/util/concurrent/ConcurrentHashMap.java#L2467">https://github.com/openjdk/jdk/blob/af5bf81754072fa5879726cfacb7404892b553f0/src/java.base/share/classes/java/util/concurrent/ConcurrentHashMap.java#L2467</a><br></div><div><br></div><div>Please let me know if I am going wrong anywhere </div><div><br></div><div>or if there are any code paths which can make i >=n when advance = false</div><div><br></div><div>Any help would be great.</div><span class="gmail_signature_prefix">-- </span><br><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr">Regards,<div>Sreyan Chakravarty</div></div></div></div></div>