RFR 8029891 : Deadlock detected in java/lang/ClassLoader/deadlock/GetResource.java

Brent Christian 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 mailing list