You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@felix.apache.org by "Richard S. Hall (Commented) (JIRA)" <ji...@apache.org> on 2012/02/29 20:27:57 UTC

[jira] [Commented] (FELIX-3369) Deadlock on org.apache.felix.framework.BundleWiringImpl

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

Richard S. Hall commented on FELIX-3369:
----------------------------------------

I don't believe there were any changes in this area in 4.0.2 vs 4.0.1. This sounds like the typical scenario where the JVM is grabbing class loader locks, because the Felix framework doesn't hold onto class loader locks while loading classes. See:

    http://underlap.blogspot.com/2006_11_01_archive.html

Actually, Java 7 introduced a new mechanism for this (i.e., ClassLoader.registerAsParallelCapable()), which the framework can now possibly use to fix this issue on > Java 7.

If this is really what is going on here, though, there isn't anything the framework can do about it. If you are on Java 6, you could try the flags in the blog above.

    
                
> Deadlock on org.apache.felix.framework.BundleWiringImpl
> -------------------------------------------------------
>
>                 Key: FELIX-3369
>                 URL: https://issues.apache.org/jira/browse/FELIX-3369
>             Project: Felix
>          Issue Type: Bug
>          Components: Framework
>    Affects Versions: framework-4.0.2
>            Reporter: Carlos Quiroz
>
> After upgrading to Felix 4.0.2 from 3.2.1 one of our legacy bundles started failing to start
> After inspection I found a deadlock on org.apache.felix.framework.BundleWiringImpl
> A downgrade to Felix 4.0.1 fixes this problem so I assume the problem started in 4.0.2
> Found one Java-level deadlock:
> =============================
> "task":
>   waiting to lock monitor 103072f18 (object 7f4615700, a org.apache.felix.framework.BundleWiringImpl$BundleClassLoaderJava5),
>   which is held by "FelixStartLevel"
> "FelixStartLevel":
>   waiting to lock monitor 1030287e0 (object 7f625f8a8, a org.apache.felix.framework.BundleWiringImpl$BundleClassLoaderJava5),
>   which is held by "task"
> Java stack information for the threads listed above:
> ===================================================
> "task":
> 	at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1836)
> 	- waiting to lock <7f4615700> (a org.apache.felix.framework.BundleWiringImpl$BundleClassLoaderJava5)
> 	at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
> 	at org.apache.felix.framework.BundleWiringImpl.getClassByDelegation(BundleWiringImpl.java:1317)
> 	at org.apache.felix.framework.BundleWiringImpl.searchDynamicImports(BundleWiringImpl.java:1558)
> 	at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1439)
> 	at org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:72)
> 	at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1843)
> 	at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
> 	at java.lang.Class.forName0(Native Method)
> 	at java.lang.Class.forName(Class.java:247)
> 	at sun.rmi.server.LoaderHandler.loadClass(LoaderHandler.java:357)
> 	at sun.rmi.server.LoaderHandler.loadClass(LoaderHandler.java:163)
> 	at java.rmi.server.RMIClassLoader$2.loadClass(RMIClassLoader.java:620)
> 	at java.rmi.server.RMIClassLoader.loadClass(RMIClassLoader.java:247)
> 	at net.jini.loader.ClassLoading.loadClass(ClassLoading.java:138)
> 	at net.jini.io.MarshalInputStream.resolveClass(MarshalInputStream.java:296)
> 	at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1574)
> 	at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1495)
> 	at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1731)
> 	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328)
> 	at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350)
> 	at net.jini.io.MarshalledInstance.get(MarshalledInstance.java:358)
> 	at net.jini.io.MarshalledInstance.get(MarshalledInstance.java:287)
> 	at com.sun.jini.proxy.MarshalledWrapper.get(MarshalledWrapper.java:127)
> 	at com.sun.jini.reggie.Item.get(Item.java:155)
> 	at com.sun.jini.reggie.Item.toServiceItem(Item.java:191)
> 	at com.sun.jini.reggie.Matches.get(Matches.java:76)
> 	at com.sun.jini.reggie.RegistrarProxy.lookup(RegistrarProxy.java:138)
> 	at net.jini.lookup.ServiceDiscoveryManager$LookupCacheImpl$LookupTask.run(ServiceDiscoveryManager.java:929)
> 	at net.jini.lookup.ServiceDiscoveryManager$LookupCacheImpl$RegisterListenerTask.run(ServiceDiscoveryManager.java:901)
> 	at com.sun.jini.thread.TaskManager$TaskThread.run(TaskManager.java:331)
> "FelixStartLevel":
> 	at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1836)
> 	- waiting to lock <7f625f8a8> (a org.apache.felix.framework.BundleWiringImpl$BundleClassLoaderJava5)
> 	at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
> 	at org.apache.felix.framework.BundleWiringImpl.getClassByDelegation(BundleWiringImpl.java:1317)
> 	at org.apache.felix.framework.BundleWiringImpl.searchImports(BundleWiringImpl.java:1481)
> 	at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1427)
> 	at org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:72)
> 	at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1843)
> 	at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
> 	at edu.gemini.pot.spdb.osgi.Activator.start(Activator.java:73)
> 	at org.apache.felix.framework.util.SecureAction.startActivator(SecureAction.java:641)
> 	at org.apache.felix.framework.Felix.activateBundle(Felix.java:1977)
> 	at org.apache.felix.framework.Felix.startBundle(Felix.java:1895)
> 	at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1191)
> 	at org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:295)
> 	at java.lang.Thread.run(Thread.java:680)

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira