[ 
https://issues.apache.org/jira/browse/FELIX-5942?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16625982#comment-16625982
 ] 

ASF GitHub Bot commented on FELIX-5942:
---------------------------------------

GitHub user adessaigne opened a pull request:

    https://github.com/apache/felix/pull/156

    FELIX-5942 - Replace wait/notify by lock/conditions in Felix to avoid freeze

    Fix proposal for 
[FELIX-5942](https://issues.apache.org/jira/browse/FELIX-5942).
    
    Instead of a single `Object` with calls to `wait` and `notifyAll` we're 
using a `Lock` with 2 `Condition` objects :
    * one when the waiting conditions on global lock acquisition have changed
    * one when the waiting conditions on bundle lock acquisition have changed

You can merge this pull request into a Git repository by running:

    $ git pull https://github.com/adessaigne/felix FELIX-5942

Alternatively you can review and apply these changes as the patch at:

    https://github.com/apache/felix/pull/156.patch

To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:

    This closes #156
    
----
commit d906ec37291bbc7d9fd4bd3211aaae0b4f9eac00
Author: Antoine DESSAIGNE <antoine.dessaigne@...>
Date:   2018-09-24T15:22:12Z

    FELIX-5942 - Replace wait/notify by lock/conditions in Felix to avoid freeze

----


> 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
>         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
>  * 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)

Reply via email to