[ https://issues.apache.org/jira/browse/GERONIMO-4458?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12656871#action_12656871 ]
Kevan Miller commented on GERONIMO-4458: ---------------------------------------- Agreed that the contextclassloader change is not needed -- my mistake. I agree that disallowing potentially cyclical classloader traversals will avoid deadlocks. I'll code this and assuming I'm happy with the implementation (and it works), will commit. Note that I think we require the following checks during transform() if classloader is parent of transformer-agent, then ignore. if classloader is a parent of an individual ClassFileTransformer implementation, then ignore for the individual transformer. I'm not advocating this for it's functionality, but it's needed to avoid deadlocks, given current config structure. The alternative is to compute the superset of all parents (transformer-agent parents and each ClassFileTransformer implementation parents). I think there are a few dependency issues which we should probably address while we're in the neighborhood... 1) wadi-clustering has a dependency on the aspectj config, I don't know why that's needed... 2) GERONIMO-3141 moved transformer-agent jars into the system classpath. I don't think that will be needed any longer and the jars can move back to transformer-agent. > Another ClassLoader deadlock during server startup > -------------------------------------------------- > > Key: GERONIMO-4458 > URL: https://issues.apache.org/jira/browse/GERONIMO-4458 > Project: Geronimo > Issue Type: Bug > Security Level: public(Regular issues) > Affects Versions: 2.2 > Reporter: Kevan Miller > Assignee: Kevan Miller > Priority: Critical > Fix For: 2.2 > > > G 2.2 TCK testing is running into a ClassLoader deadlock. Here are the > stacktraces: > {noformat} > Found one Java-level deadlock: > ============================= > "RMI TCP Connection(4)-9.42.75.229": > waiting to lock monitor 0x0849be70 (object 0xd57192c8, a > org.apache.geronimo.kernel.config.MultiParentClassLoader), > which is held by "main" > "main": > waiting to lock monitor 0x0849bed4 (object 0xd50ca400, a > org.apache.geronimo.kernel.config.ChildrenConfigurationClassLoader), > which is held by "RMI TCP Connection(4)-9.42.75.229" > Java stack information for the threads listed above: > =================================================== > "RMI TCP Connection(4)-9.42.75.229": > at > org.aspectj.weaver.tools.WeavingAdaptor$WeavingAdaptorMessageHolder.<init>(WeavingAdaptor.java:498) > at > org.aspectj.weaver.tools.WeavingAdaptor.createMessageHandler(WeavingAdaptor.java:179) > at > org.aspectj.weaver.loadtime.ClassLoaderWeavingAdaptor.initialize(ClassLoaderWeavingAdaptor.java:111) > at > org.aspectj.weaver.loadtime.Aj$ExplicitlyInitializedClassLoaderWeavingAdaptor.initialize(Aj.java:151) > at > org.aspectj.weaver.loadtime.Aj$ExplicitlyInitializedClassLoaderWeavingAdaptor.getWeavingAdaptor(Aj.java:156) > at > org.aspectj.weaver.loadtime.Aj$WeaverContainer.getWeaver(Aj.java:122) > at org.aspectj.weaver.loadtime.Aj.preProcess(Aj.java:73) > - locked <0xd4f23b40> (a > org.apache.geronimo.kernel.config.MultiParentClassLoader) > at > org.aspectj.weaver.loadtime.ClassPreProcessorAgentAdapter.transform(ClassPreProcessorAgentAdapter.java:52) > at > org.apache.geronimo.transformer.TransformerCollection.transform(TransformerCollection.java:43) > at > sun.instrument.TransformerManager.transform(TransformerManager.java:169) > at > sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:365) > at java.lang.ClassLoader.defineClass1(Native Method) > at java.lang.ClassLoader.defineClass(ClassLoader.java:621) > at > java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124) > at java.net.URLClassLoader.defineClass(URLClassLoader.java:260) > at java.net.URLClassLoader.access$000(URLClassLoader.java:56) > at java.net.URLClassLoader$1.run(URLClassLoader.java:195) > at java.security.AccessController.doPrivileged(Native Method) > at java.net.URLClassLoader.findClass(URLClassLoader.java:188) > at > org.apache.geronimo.kernel.config.MultiParentClassLoader.loadClassInternal(MultiParentClassLoader.java:455) > - locked <0xd4f23b40> (a > org.apache.geronimo.kernel.config.MultiParentClassLoader) > at > org.apache.geronimo.kernel.config.ChildrenConfigurationClassLoader.loadClass(ChildrenConfigurationClassLoader.java:69) > - locked <0xd4ea35c8> (a > org.apache.geronimo.kernel.config.ChildrenConfigurationClassLoader) > at > org.apache.geronimo.kernel.config.ChildrenConfigurationClassLoader.loadClass(ChildrenConfigurationClassLoader.java:52) > at > org.apache.geronimo.kernel.config.MultiParentClassLoader.checkParents(MultiParentClassLoader.java:483) > - locked <0xd50ca440> (a > org.apache.geronimo.kernel.config.MultiParentClassLoader) > at > org.apache.geronimo.kernel.config.MultiParentClassLoader.loadClassInternal(MultiParentClassLoader.java:441) > - locked <0xd50ca440> (a > org.apache.geronimo.kernel.config.MultiParentClassLoader) > at > org.apache.geronimo.kernel.config.ChildrenConfigurationClassLoader.loadClass(ChildrenConfigurationClassLoader.java:69) > - locked <0xd50ca400> (a > org.apache.geronimo.kernel.config.ChildrenConfigurationClassLoader) > at > org.apache.geronimo.kernel.config.ChildrenConfigurationClassLoader.loadClass(ChildrenConfigurationClassLoader.java:52) > at > org.apache.geronimo.kernel.config.MultiParentClassLoader.checkParents(MultiParentClassLoader.java:483) > - locked <0xd51f63e8> (a > org.apache.geronimo.kernel.config.MultiParentClassLoader) > at > org.apache.geronimo.kernel.config.MultiParentClassLoader.loadOptimizedClass(MultiParentClassLoader.java:392) > - locked <0xd51f63e8> (a > org.apache.geronimo.kernel.config.MultiParentClassLoader) > at > org.apache.geronimo.kernel.config.MultiParentClassLoader.loadClass(MultiParentClassLoader.java:255) > - locked <0xd51f63e8> (a > org.apache.geronimo.kernel.config.MultiParentClassLoader) > at java.lang.ClassLoader.loadClass(ClassLoader.java:252) > at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320) > - locked <0xd51f63e8> (a > org.apache.geronimo.kernel.config.MultiParentClassLoader) > at java.lang.Class.getDeclaredConstructors0(Native Method) > at java.lang.Class.privateGetDeclaredConstructors(Class.java:2389) > at java.lang.Class.getConstructor0(Class.java:2699) > at java.lang.Class.newInstance0(Class.java:326) > at java.lang.Class.newInstance(Class.java:308) > at > org.apache.geronimo.security.jaas.ClassOptionLoginModule.initialize(ClassOptionLoginModule.java:50) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) > at java.lang.reflect.Method.invoke(Method.java:597) > at javax.security.auth.login.LoginContext.invoke(LoginContext.java:756) > at > javax.security.auth.login.LoginContext.access$000(LoginContext.java:186) > at javax.security.auth.login.LoginContext$4.run(LoginContext.java:683) > at java.security.AccessController.doPrivileged(Native Method) > at > javax.security.auth.login.LoginContext.invokePriv(LoginContext.java:680) > at javax.security.auth.login.LoginContext.login(LoginContext.java:579) > at > org.apache.geronimo.jmxremoting.Authenticator.authenticate(Authenticator.java:68) > at > javax.management.remote.rmi.RMIServerImpl.doNewClient(RMIServerImpl.java:213) > at > javax.management.remote.rmi.RMIServerImpl.newClient(RMIServerImpl.java:180) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) > at java.lang.reflect.Method.invoke(Method.java:597) > at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:305) > at sun.rmi.transport.Transport$1.run(Transport.java:159) > at java.security.AccessController.doPrivileged(Native Method) > at sun.rmi.transport.Transport.serviceCall(Transport.java:155) > at > sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535) > at > sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790) > at > sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649) > at > java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) > at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) > at java.lang.Thread.run(Thread.java:619) > "main": > at > org.apache.geronimo.kernel.config.ChildrenConfigurationClassLoader.loadClass(ChildrenConfigurationClassLoader.java:61) > - waiting to lock <0xd50ca400> (a > org.apache.geronimo.kernel.config.ChildrenConfigurationClassLoader) > at > org.apache.geronimo.kernel.config.ChildrenConfigurationClassLoader.loadClass(ChildrenConfigurationClassLoader.java:52) > at > org.apache.geronimo.kernel.config.MultiParentClassLoader.checkParents(MultiParentClassLoader.java:483) > - locked <0xd51edbf8> (a > org.apache.geronimo.kernel.config.MultiParentClassLoader) > at > org.apache.geronimo.kernel.config.MultiParentClassLoader.loadClassInternal(MultiParentClassLoader.java:441) > - locked <0xd51edbf8> (a > org.apache.geronimo.kernel.config.MultiParentClassLoader) > at > org.apache.geronimo.kernel.config.ChildrenConfigurationClassLoader.loadClass(ChildrenConfigurationClassLoader.java:69) > - locked <0xd51eec50> (a > org.apache.geronimo.kernel.config.ChildrenConfigurationClassLoader) > at > org.apache.geronimo.kernel.config.ChildrenConfigurationClassLoader.loadClass(ChildrenConfigurationClassLoader.java:52) > at > org.apache.geronimo.kernel.config.MultiParentClassLoader.checkParents(MultiParentClassLoader.java:483) > - locked <0xd57192c8> (a > org.apache.geronimo.kernel.config.MultiParentClassLoader) > at > org.apache.geronimo.kernel.config.MultiParentClassLoader.loadOptimizedClass(MultiParentClassLoader.java:392) > - locked <0xd57192c8> (a > org.apache.geronimo.kernel.config.MultiParentClassLoader) > at > org.apache.geronimo.kernel.config.MultiParentClassLoader.loadClass(MultiParentClassLoader.java:255) > - locked <0xd57192c8> (a > org.apache.geronimo.kernel.config.MultiParentClassLoader) > at java.lang.ClassLoader.loadClass(ClassLoader.java:252) > at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320) > - locked <0xd57192c8> (a > org.apache.geronimo.kernel.config.MultiParentClassLoader) > at > org.aspectj.weaver.tools.WeavingAdaptor$WeavingAdaptorMessageHolder.<init>(WeavingAdaptor.java:498) > at > org.aspectj.weaver.tools.WeavingAdaptor.createMessageHandler(WeavingAdaptor.java:179) > at > org.aspectj.weaver.loadtime.ClassLoaderWeavingAdaptor.initialize(ClassLoaderWeavingAdaptor.java:111) > at > org.aspectj.weaver.loadtime.Aj$ExplicitlyInitializedClassLoaderWeavingAdaptor.initialize(Aj.java:151) > at > org.aspectj.weaver.loadtime.Aj$ExplicitlyInitializedClassLoaderWeavingAdaptor.getWeavingAdaptor(Aj.java:156) > at > org.aspectj.weaver.loadtime.Aj$WeaverContainer.getWeaver(Aj.java:122) > at org.aspectj.weaver.loadtime.Aj.preProcess(Aj.java:73) > - locked <0xd5712f78> (a > org.apache.geronimo.kernel.config.MultiParentClassLoader) > at > org.aspectj.weaver.loadtime.ClassPreProcessorAgentAdapter.transform(ClassPreProcessorAgentAdapter.java:52) > at > org.apache.geronimo.transformer.TransformerCollection.transform(TransformerCollection.java:43) > at > sun.instrument.TransformerManager.transform(TransformerManager.java:169) > at > sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:365) > at java.lang.ClassLoader.defineClass1(Native Method) > at java.lang.ClassLoader.defineClass(ClassLoader.java:621) > at > java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124) > at java.net.URLClassLoader.defineClass(URLClassLoader.java:260) > at java.net.URLClassLoader.access$000(URLClassLoader.java:56) > at java.net.URLClassLoader$1.run(URLClassLoader.java:195) > at java.security.AccessController.doPrivileged(Native Method) > at java.net.URLClassLoader.findClass(URLClassLoader.java:188) > at > org.apache.geronimo.kernel.config.MultiParentClassLoader.loadOptimizedClass(MultiParentClassLoader.java:407) > - locked <0xd5712f78> (a > org.apache.geronimo.kernel.config.MultiParentClassLoader) > at > org.apache.geronimo.kernel.config.MultiParentClassLoader.loadClass(MultiParentClassLoader.java:255) > - locked <0xd5712f78> (a > org.apache.geronimo.kernel.config.MultiParentClassLoader) > at java.lang.ClassLoader.loadClass(ClassLoader.java:252) > at > org.apache.geronimo.gbean.runtime.GBeanInstance.<init>(GBeanInstance.java:228) > at > org.apache.geronimo.kernel.basic.BasicKernel.loadGBean(BasicKernel.java:352) > at > org.apache.geronimo.kernel.config.ConfigurationUtil.startConfigurationGBeans(ConfigurationUtil.java:441) > at > org.apache.geronimo.kernel.config.KernelConfigurationManager.start(KernelConfigurationManager.java:190) > at > org.apache.geronimo.kernel.config.SimpleConfigurationManager.startConfiguration(SimpleConfigurationManager.java:562) > - locked <0xd500a750> (a > org.apache.geronimo.kernel.config.EditableKernelConfigurationManager) > at sun.reflect.GeneratedMethodAccessor22.invoke(Unknown Source) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) > at java.lang.reflect.Method.invoke(Method.java:597) > at > org.apache.geronimo.gbean.runtime.ReflectionMethodInvoker.invoke(ReflectionMethodInvoker.java:34) > at > org.apache.geronimo.gbean.runtime.GBeanOperation.invoke(GBeanOperation.java:130) > at > org.apache.geronimo.gbean.runtime.GBeanInstance.invoke(GBeanInstance.java:815) > at > org.apache.geronimo.gbean.runtime.RawInvoker.invoke(RawInvoker.java:57) > at > org.apache.geronimo.kernel.basic.RawOperationInvoker.invoke(RawOperationInvoker.java:35) > at > org.apache.geronimo.kernel.basic.ProxyMethodInterceptor.intercept(ProxyMethodInterceptor.java:96) > at > org.apache.geronimo.gbean.GBeanLifecycle$$EnhancerByCGLIB$$752a2ecb.startConfiguration(<generated>) > at > org.apache.geronimo.system.main.EmbeddedDaemon.doStartup(EmbeddedDaemon.java:161) > at > org.apache.geronimo.system.main.EmbeddedDaemon.execute(EmbeddedDaemon.java:78) > at > org.apache.geronimo.kernel.util.MainConfigurationBootstrapper.main(MainConfigurationBootstrapper.java:45) > at org.apache.geronimo.cli.AbstractCLI.executeMain(AbstractCLI.java:65) > at org.apache.geronimo.cli.daemon.DaemonCLI.main(DaemonCLI.java:30) > {noformat} -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.