[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openjdk-core-libs-dev
Subject:    Re: RFR: 8231584: Deadlock with ClassLoader.findLibrary and System.loadLibrary call
From:       Mandy Chung <mandy.chung () oracle ! com>
Date:       2019-09-30 18:18:09
Message-ID: 7f8c6c29-0670-066a-9d51-b6f9803e9939 () oracle ! com
[Download RAW message or body]

I will need to look at this closer.     Skimming through the 
implementation, it seems to me that the Runtime::loadLibrary0 does not 
need to be synchronized.     ClassLoader::loadLibrary0 should ensure that 
a native library of a given name is loaded and registered only once.     
Can you explain why you think ClassLoader::findLibrary needs to be 
called with a lock?

Mandy

On 9/27/19 9:37 AM, Anton Kozlov wrote:
> Hi,
> 
> I think that JDK-8194653 [0] affects jdk/jdk and it doesn't specific to \
> FileSystems.getDefault. 
> I'm starting a new thread/bug as the original issue marked as resolved ([3])
> 
> Ryan, thanks for investigation and providing a test [1]!
> 
> But the test fails in the same way if the FileSystems.getDefault replaced with \
> anything that calls System.loadLibrary in an initializer. For jdk/jdk it may be \
> jdk.net.ExtendedSocketOptions.SO_FLOW_SLA and the issue will arise. 
> I don't think it's possible to provide a general fix for that. We are unable to \
> prevent a user to take the Runtime's monitor and do initialization and loadLibrary, \
> which make a room for deadlock. Taking the lock is incorrect action at first. We \
> can only prevent doing that by accident. 
> From the original deadlock report [2], initialization and loadLibrary under the \
> monitor caused not by java.* code, but class loader's findLibrary \
> (sun.misc.ExtClassLoader to be specific). A workaround for ExtClassLoader is \
> possible, to ensure all necessary classes are inited before findLibrary called, \
> i.e. in the constructor. But then we should require the same for any custom class \
> loader. Chances that it would be implemented correctly are not high since even \
> ExtClassLoader is flawed. 
> I propose to call a ClassLoader.findLibrary with Runtime's monitor unlocked:
> 
> http://cr.openjdk.java.net/~akozlov/8231584/webrev.00
> 
> Thanks,
> Anton
> 
> [0]: https://bugs.openjdk.java.net/browse/JDK-8194653
> [1]: https://mail.openjdk.java.net/pipermail/core-libs-dev/2019-April/059811.html
> [2]: http://mail.openjdk.java.net/pipermail/core-libs-dev/2018-January/050819.html
> [3]: https://bugs.openjdk.java.net/browse/JDK-8231584
> 


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic