Uploaded image for project: 'Felix'
  1. Felix
  2. FELIX-5942

Felix Framework freezes when resolving classes in parallel with Java 10

    XMLWordPrintableJSON

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: framework-6.0.1
    • Fix Version/s: framework-6.0.2
    • Component/s: Framework
    • Labels:
      None

      Description

      Hello.

      When resolving a class in parallel in Java 10, you end up with a freeze.

      You end up with threads beeing blocked

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

      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.

        Attachments

        1. ConcurrentClassLoaderTest.java
          5 kB
          Antoine DESSAIGNE

          Issue Links

            Activity

              People

              • Assignee:
                karlpauls Karl Pauls
                Reporter:
                antoine.dessaigne Antoine DESSAIGNE
              • Votes:
                2 Vote for this issue
                Watchers:
                5 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: