[ https://issues.apache.org/jira/browse/FELIX-4523?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Benjamin Rogge updated FELIX-4523: ---------------------------------- Comment: was deleted (was: The changes in urlhandlers-2.patch result in compile errors when I apply them in Intellij. Is this a problem with (me or) Intellij or is the patch broken? {code} public static void unregisterFrameworkInstance(Object framework) { boolean unregister = false; synchronized (m_frameworks) { if (m_frameworks.contains(framework)) { if (m_frameworks.size() == 1 && m_handler != null) { unregister = true; } } } // <-- This appears to be too much else { m_counter--; } } {code}) > Deadlock in URLHandlers when Felix.init and Felix.stop are called concurrently > ------------------------------------------------------------------------------ > > Key: FELIX-4523 > URL: https://issues.apache.org/jira/browse/FELIX-4523 > Project: Felix > Issue Type: Bug > Components: Framework > Affects Versions: framework-4.2.1 > Environment: linux, junittests > Reporter: Benjamin Rogge > Assignee: Karl Pauls > Attachments: ConcurrentTest.java, urlhandlers-2.patch, > urlhandlers.patch > > > From time to time we are experiencing a deadlock in the URLHandlers Class in > Apache Felix. We are using Felix as an embedded OSGi Container and > instantiate the Felix Framework via ServiceLoader and Framework Factory > ourselves. The situation is as follows: When Felix.stop and Felix.init are > called by different threads, eventually > URLHandlers.unregisterFrameworkListsForContextSearch and > URLHandlers.registerFrameworkInstance are called by the threads. There are > two locks: m_frameworks and the Class Object of URL (URL.class). > registerFrameworkInstance tries to aquire m_frameworks first and via the > constructor of URLHanders URL.class after that. > unregisterFrameworkListsForContextSearch tries to aquire URL.class first and > m_frameworks after that. This is a classic deadlock situation. The situation > arises in unittests where we frequently start and stop the felix framework. > Stacktracke log: > {code} > Found one Java-level deadlock: > ============================= > "FelixShutdown": > waiting to lock monitor 0x0000000000ff7710 (object 0x00000007ff33e7f0, a > java.util.ArrayList), > which is held by "main" > "main": > waiting to lock monitor 0x00000000022c4a08 (object 0x0000000783b06b18, a > java.lang.Class), > which is held by "FelixShutdown" > Java stack information for the threads listed above: > =================================================== > "FelixShutdown": > at > org.apache.felix.framework.URLHandlers.unregisterFrameworkListsForContextSearch(URLHandlers.java:315) > - waiting to lock <0x00000007ff33e7f0> (a java.util.ArrayList) > - locked <0x00000007ff33e840> (a java.util.HashMap) > - locked <0x0000000783b06b18> (a java.lang.Class for java.net.URL) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > at java.lang.reflect.Method.invoke(Method.java:606) > at > org.apache.felix.framework.util.SecureAction.invoke(SecureAction.java:840) > at > org.apache.felix.framework.URLHandlers.unregisterFrameworkInstance(URLHandlers.java:635) > at > org.apache.felix.framework.URLHandlersActivator.stop(URLHandlersActivator.java:76) > at > org.apache.felix.framework.util.SecureAction.stopActivator(SecureAction.java:667) > at > org.apache.felix.framework.Felix$SystemBundleActivator.stop(Felix.java:4715) > at > org.apache.felix.framework.util.SecureAction.stopActivator(SecureAction.java:667) > at org.apache.felix.framework.Felix.stopBundle(Felix.java:2530) > at org.apache.felix.framework.Felix$2.run(Felix.java:959) > at java.lang.Thread.run(Thread.java:724) > "main": > at org.apache.felix.framework.URLHandlers.<init>(URLHandlers.java:150) > - waiting to lock <0x0000000783b06b18> (a java.lang.Class for > java.net.URL) > at > org.apache.felix.framework.URLHandlers.registerFrameworkInstance(URLHandlers.java:600) > - locked <0x00000007ff33e7f0> (a java.util.ArrayList) > at > org.apache.felix.framework.URLHandlersActivator.start(URLHandlersActivator.java:71) > at > org.apache.felix.framework.util.SecureAction.startActivator(SecureAction.java:645) > at > org.apache.felix.framework.Felix$SystemBundleActivator.start(Felix.java:4634) > at > org.apache.felix.framework.util.SecureAction.startActivator(SecureAction.java:645) > at org.apache.felix.framework.Felix.init(Felix.java:783) > {code} -- This message was sent by Atlassian JIRA (v6.2#6252)