[
https://issues.apache.org/jira/browse/FELIX-5942?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Karl Pauls closed FELIX-5942.
-----------------------------
> Felix Framework freezes when resolving classes in parallel with Java 10
> -----------------------------------------------------------------------
>
> Key: FELIX-5942
> URL: https://issues.apache.org/jira/browse/FELIX-5942
> Project: Felix
> Issue Type: Bug
> Components: Framework
> Affects Versions: framework-6.0.1
> Reporter: Antoine DESSAIGNE
> Assignee: Karl Pauls
> Priority: Major
> Fix For: framework-6.0.2
>
> Attachments: ConcurrentClassLoaderTest.java
>
>
> Hello.
> When resolving a class in parallel in Java 10, you end up with a freeze.
> You end up with threads beeing blocked
> {noformat}
> "Thread-99" #121 prio=5 os_prio=0 tid=0x000001bdaf679000 nid=0x69d4 in
> Object.wait() [0x000000296d0fe000]
> java.lang.Thread.State: BLOCKED (on object monitor)
> at java.lang.Object.wait([email protected]/Native Method)
> - waiting on <0x00000006c931dd20> (a [Ljava.lang.Object;)
> at java.lang.Object.wait([email protected]/Object.java:328)
> at org.apache.felix.framework.Felix.acquireGlobalLock(Felix.java:4301)
> - waiting to re-lock in wait() <0x00000006c931dd20> (a
> [Ljava.lang.Object;)
> at
> org.apache.felix.framework.StatefulResolver.resolve(StatefulResolver.java:413)
> at
> org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:3318)
> at org.apache.felix.framework.Felix.loadBundleClass(Felix.java:1618)
> at org.apache.felix.framework.BundleImpl.loadClass(BundleImpl.java:978)
> at
> org.apache.felix.framework.ConcurrentClassLoaderTest$1.run(ConcurrentClassLoaderTest.java:69){noformat}
> You'll find attached a test reproducing the issue :
> [^ConcurrentClassLoaderTest.java]
> Here's what you need to freeze felix :
> * Lots of threads trying to acquire the global lock
> ** here we're resolving a class from a bundle with dynamic import packages
> * An Oracle JDK 10 or OpenJDK 11
> ** it's working fine with Oracle JDK 8
>
> Replacing the {{m_bundleLock}} by a fair {{ReentrantLock}} with a
> {{Condition}} makes it work with 10 parallel threads but still fails with 100
> threads.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)