Note that there is a possible initialization circularity introduced by this patch, which I think is harmless because:

- ThreadLocalRandom has just recently been enhanced to cope with such situations - CHM needs ThreadLocalRandom in put() for example, when new entry is being inserted, TLR invokes Boolean.getBoolean("java.util.secureRandomSeed") as the last thing in its static initializer but still works correctly even before this last part of initializer is finished).

- When an invocation of Boolean.getBoolean ends up in the same Properties instance (the System.getProperties()) it might be asking for an entry in the same CHM instance (CHM.get()) which is just being modified by put(). This amounts to re-entrance of CHM instance, but is harmless as Boolean.getBoolean is only possibly invoked as the last thing of various CHM modifications methods when the CHM state is already consistent (see addCount() invocations in CHM).


Regards, Peter

On 05/13/2016 01:55 AM, Brent Christian wrote:
Update to the test, and additional comments:

http://cr.openjdk.java.net/~bchristi/8029891/webrev.5/webrev/

Thanks,
-Brent

On 5/12/16 4:15 PM, Mandy Chung wrote:

On May 12, 2016, at 2:44 PM, Brent Christian <brent.christ...@oracle.com> wrote:

On 5/12/16 11:44 AM, Mandy Chung wrote:

This patch looks good.

To help future readers to understand this, it may be better to move:
1152     private transient ConcurrentHashMap<Object, Object> map =
1153             new ConcurrentHashMap<>(8);

to the beginning and add a comment describing what are lock-free and what are synchronized (basically some part of your summary below).

Also a comment in Hashtable::defaultWriteHashtable and readHashtable methods to mention that they are overridden by Properties.

Good ideas.

In the GetResource.java test, what is the reason taking out:
73 URL u2 = Thread.currentThread().getContextClassLoader().getResource("sun/util/resources/CalendarData.class”);


It was coming back null and failing the test, I think because
Jigsaw moved CalendarData into a different module (jdk.localedata, I believe?).

src/java.base/share/classes/sun/util/resources/CalendarData.properties is still in java.base. This is due to resource encapsulation. Unnamed module calling ClassLoader::getResource of a resource in a named module returns null.


I fiddled with @modules a bit, but stopped when I discovered that when the test deadlocks, it hangs on the first call to getResource() and doesn't get to this line.

I can look into getting it to load CalendarData again, if you like.

The launcher and builtin class loader implementation has changed so much that the code path exercised JDK-6977738 no longer exists. I think dropping line 73 is okay.

Mandy


Reply via email to