8028564: Concurrent calls to CHM.put can fail to add the key/value to the map

Chris Hegarty chris.hegarty at oracle.com
Fri Dec 6 10:07:38 UTC 2013

On 06/12/13 08:38, Paul Sandoz wrote:
> On Dec 5, 2013, at 9:29 PM, Doug Lea <dl at cs.oswego.edu> wrote:
>> On 12/05/2013 03:18 PM, Brent Christian wrote:
>>> I'm curious about why this was done:
>>> *** 4452,4462 ****
>>>            public final boolean removeAll(Collection<?> c) {
>>> !             Objects.requireNonNull(c);
>>>                boolean modified = false;
>>> --- 4495,4505 ----
>>>            public final boolean removeAll(Collection<?> c) {
>>> !             if (c == null) throw new NullPointerException();
>>>                boolean modified = false;
>> It wasn't actually done. In part as a way to keep base jsr166
>> sources for CHM and most other existing classes as JDK7-compatible
>> as possible, the jsr166 versions always use the explicit form.
>> For this update, the Oracle-initiated changes that hadn't been in
>> jsr166 versions don't appear.
> My preference is to keep CHM (and other classes) in 8 as close as possible to CHM in 166, otherwise it just makes it harder to apply fixes. So i deliberately took the 166 version of the null checks.

Agreed. It is too easy to miss changes and make mistakes otherwise.


> I tend to take sources from 166, copy them into the JDK overwriting the existing sources, and then carefully go through the diffs (via the IDE) selectively applying. We already have one annoying diff related to @Deprecated which is in 166 but not in CHM and that is extremely easy to overlook.
> Paul.

More information about the core-libs-dev mailing list