You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@felix.apache.org by "Antoine DESSAIGNE (JIRA)" <ji...@apache.org> on 2018/09/24 13:40:00 UTC

[jira] [Updated] (FELIX-5942) Felix Framework freezes when resolving classes in parallel with Java 10

     [ https://issues.apache.org/jira/browse/FELIX-5942?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Antoine DESSAIGNE updated FELIX-5942:
-------------------------------------
    Description: 
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(java.base@10.0.2/Native Method)
	- waiting on <0x00000006c931dd20> (a [Ljava.lang.Object;)
	at java.lang.Object.wait(java.base@10.0.2/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
 * A Java 10 runtime

  was:
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(java.base@10.0.2/Native Method)
	- waiting on <0x00000006c931dd20> (a [Ljava.lang.Object;)
	at java.lang.Object.wait(java.base@10.0.2/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.

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
* A Java 10 runtime


> 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
>            Priority: Major
>         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(java.base@10.0.2/Native Method)
> 	- waiting on <0x00000006c931dd20> (a [Ljava.lang.Object;)
> 	at java.lang.Object.wait(java.base@10.0.2/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
>  * A Java 10 runtime



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)