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