RFR 8029891 : Deadlock detected in java/lang/ClassLoader/deadlock/GetResource.java
brent.christian at oracle.com
Mon May 4 16:11:59 UTC 2015
Please review this fix, courtesy of Peter Levart (thanks!), that I would
like to get in.
There is some discussion of it in the bug report, starting at 2014-12-31.
The problem, as stated by Mandy:
"System Properties is a hashtable that synchronizes on itself for any
access. Currently System.getProperties returns the Properties instance
accessed by the system in which any application code might synchronize
on it (that's what the test is doing). The problem reported JDK-6977738
is about Properties.store method that was fixed not to synchronize on
this instance. System property is a common way for changing the default
setting and so it's impractical to expect the class loading code path
not to call System.getProperty."
This fix changes java.util.Properties to store its values in an internal
ConcurrentHashMap, ignoring its Hashtable heritage. In this way,
Properties can be "de-sychronized": all methods inherited from Hashtable
are overridden, to remove synchronization, and delegate to the internal CHM.
The serialized form is unchanged.
An alternative approach considered would be for System.getProperties()
to return a duplicate snapshot of the current Properties. This presents
a compatibility risk to existing code that keeps a reference to the
return value of System.getProperties() and expects to either read new
properties added afterwards, or set properties on the cached copy.
More information about the core-libs-dev