RFR : 8016446 : (m) Add override forEach/replaceAll to HashMap, Hashtable, IdentityHashMap, WeakHashMap, TreeMap

Paul Sandoz paul.sandoz at oracle.com
Thu Jun 13 14:24:03 UTC 2013


On Jun 13, 2013, at 3:21 PM, Remi Forax <forax at univ-mlv.fr> wrote:

> On 06/13/2013 07:28 AM, Mike Duigou wrote:
>> I have updated my webrev with Remi's improvements and some other improvements to the fast-fail concurrent modification checking.
>> 
>> Revised webrev:
>> 
>> http://cr.openjdk.java.net/~mduigou/JDK-8016446/1/webrev/
>> 
>> Mike
> 
> Hi Mike,
> 
> in TreeMap.forEach (and replaceAll), the check for co-modification should be done *before* action.accept(...)
> and not after because the semantics of the Iterator allows users to modify the map (hashmap or treemap)
> if it's the last element (so we should not check modCount after the last element).

That creates conditions that may or may not fail with a CME depending on the map implementation (e.g. if state is hoisted or referenced) and the state of the map instance e.g. if the size of the map is 1 or > 1 and the BiConsumer instance add a new value to the map. 

Interference caused by function values passed to collection/map bulk operations should always result in an CME regardless of the state of the collection/map instance.

Paul.




More information about the core-libs-dev mailing list