Community
Participate
Working Groups
I get the following deadlock fairly predictably when I run with load-time weaving on my Tomcat project using a Sun JVM. As usual, I don’t see any issues on JRockIt ;-) This happens with M3a and also with the Sept. 8 development build. In this case, it looks like one application thread in Tomcat is waiting for the other to get a lock, but they are being loaded and hence woven in the opposite order. Is this actually a Tomcat bug? It seems like a tricky condition to deal with, when the application is synchronizing access and the class loading system adds in new synchronization blocks.. Sep 12, 2005 11:40:20 AM org.apache.coyote.http11.Http11Protocol start INFO: Starting Coyote HTTP/1.1 on http-8080 Full thread dump Java HotSpot(TM) Client VM (1.5.0_04-b05 mixed mode): "http-8080-Monitor" prio=5 tid=0x272a1940 nid=0x21b8 in Object.wait() [0x2862f00 0..0x2862fd68] at java.lang.Object.wait(Native Method) - waiting on <0x02c52e50> (a org.apache.tomcat.util.threads.ThreadPool$M onitorRunnable) at org.apache.tomcat.util.threads.ThreadPool$MonitorRunnable.run(ThreadP ool.java:559) - locked <0x02c52e50> (a org.apache.tomcat.util.threads.ThreadPool$Monit orRunnable) at java.lang.Thread.run(Thread.java:595) "http-8080-Processor25" daemon prio=5 tid=0x275c93a8 nid=0x1900 waiting for moni tor entry [0x285ed000..0x285ef9e8] at org.aspectj.weaver.loadtime.Aj$WeaverContainer.getWeaver(Aj.java:79) - waiting to lock <0x051a1398> (a java.util.WeakHashMap) - locked <0x05291098> (a org.apache.catalina.loader.StandardClassLoader) at org.aspectj.weaver.loadtime.Aj.preProcess(Aj.java:54) at org.aspectj.weaver.loadtime.ClassPreProcessorAgentAdapter.transform(C lassPreProcessorAgentAdapter.java:52) at sun.instrument.TransformerManager.transform(TransformerManager.java:1 22) at sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java :155) at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:620) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:12 4) at java.net.URLClassLoader.defineClass(URLClassLoader.java:260) at java.net.URLClassLoader.access$100(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 java.lang.ClassLoader.loadClass(ClassLoader.java:306) - locked <0x05291098> (a org.apache.catalina.loader.StandardClassLoader) at java.lang.ClassLoader.loadClass(ClassLoader.java:251) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319) - locked <0x05291098> (a org.apache.catalina.loader.StandardClassLoader) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.init( Http11Protocol.java:683) at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.getInitData(Lea derFollowerWorkerThread.java:48) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadP ool.java:673) at java.lang.Thread.run(Thread.java:595) "http-8080-Processor24" daemon prio=5 tid=0x270d8e28 nid=0x1c14 in Object.wait() [0x285af000..0x285afa68] at java.lang.Object.wait(Native Method) - waiting on <0x02c52660> (a org.apache.tomcat.util.threads.ThreadPool$C ontrolRunnable) at java.lang.Object.wait(Object.java:474) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadP ool.java:656) - locked <0x02c52660> (a org.apache.tomcat.util.threads.ThreadPool$Contr olRunnable) at java.lang.Thread.run(Thread.java:595) "http-8080-Processor23" daemon prio=5 tid=0x27207de0 nid=0x2070 in Object.wait() [0x2856f000..0x2856fae8] at java.lang.Object.wait(Native Method) - waiting on <0x02c52268> (a org.apache.tomcat.util.threads.ThreadPool$C ontrolRunnable) at java.lang.Object.wait(Object.java:474) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadP ool.java:656) - locked <0x02c52268> (a org.apache.tomcat.util.threads.ThreadPool$Contr olRunnable) at java.lang.Thread.run(Thread.java:595) "http-8080-Processor22" daemon prio=5 tid=0x27036408 nid=0x1698 in Object.wait() [0x2852f000..0x2852fb68] at java.lang.Object.wait(Native Method) - waiting on <0x02c51e70> (a org.apache.tomcat.util.threads.ThreadPool$C ontrolRunnable) at java.lang.Object.wait(Object.java:474) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadP ool.java:656) - locked <0x02c51e70> (a org.apache.tomcat.util.threads.ThreadPool$Contr olRunnable) at java.lang.Thread.run(Thread.java:595) "http-8080-Processor21" daemon prio=5 tid=0x270b6260 nid=0x1a68 in Object.wait() [0x284ef000..0x284efbe8] at java.lang.Object.wait(Native Method) - waiting on <0x02c51a78> (a org.apache.tomcat.util.threads.ThreadPool$C ontrolRunnable) at java.lang.Object.wait(Object.java:474) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadP ool.java:656) - locked <0x02c51a78> (a org.apache.tomcat.util.threads.ThreadPool$Contr olRunnable) at java.lang.Thread.run(Thread.java:595) "http-8080-Processor20" daemon prio=5 tid=0x275f3c88 nid=0x1ed8 in Object.wait() [0x284af000..0x284afc68] at java.lang.Object.wait(Native Method) - waiting on <0x02c51680> (a org.apache.tomcat.util.threads.ThreadPool$C ontrolRunnable) at java.lang.Object.wait(Object.java:474) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadP ool.java:656) - locked <0x02c51680> (a org.apache.tomcat.util.threads.ThreadPool$Contr olRunnable) at java.lang.Thread.run(Thread.java:595) "http-8080-Processor19" daemon prio=5 tid=0x27375238 nid=0x11b8 in Object.wait() [0x2846f000..0x2846fce8] at java.lang.Object.wait(Native Method) - waiting on <0x02c51288> (a org.apache.tomcat.util.threads.ThreadPool$C ontrolRunnable) at java.lang.Object.wait(Object.java:474) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadP ool.java:656) - locked <0x02c51288> (a org.apache.tomcat.util.threads.ThreadPool$Contr olRunnable) at java.lang.Thread.run(Thread.java:595) "http-8080-Processor18" daemon prio=5 tid=0x26e23ba8 nid=0x2600 in Object.wait() [0x2842f000..0x2842fd68] at java.lang.Object.wait(Native Method) - waiting on <0x02c50dc8> (a org.apache.tomcat.util.threads.ThreadPool$C ontrolRunnable) at java.lang.Object.wait(Object.java:474) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadP ool.java:656) - locked <0x02c50dc8> (a org.apache.tomcat.util.threads.ThreadPool$Contr olRunnable) at java.lang.Thread.run(Thread.java:595) "http-8080-Processor17" daemon prio=5 tid=0x274aec18 nid=0x1288 in Object.wait() [0x283ef000..0x283ef9e8] at java.lang.Object.wait(Native Method) - waiting on <0x02c509d0> (a org.apache.tomcat.util.threads.ThreadPool$C ontrolRunnable) at java.lang.Object.wait(Object.java:474) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadP ool.java:656) - locked <0x02c509d0> (a org.apache.tomcat.util.threads.ThreadPool$Contr olRunnable) at java.lang.Thread.run(Thread.java:595) "http-8080-Processor16" daemon prio=5 tid=0x275dc220 nid=0x2090 in Object.wait() [0x283af000..0x283afa68] at java.lang.Object.wait(Native Method) - waiting on <0x02c505d8> (a org.apache.tomcat.util.threads.ThreadPool$C ontrolRunnable) at java.lang.Object.wait(Object.java:474) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadP ool.java:656) - locked <0x02c505d8> (a org.apache.tomcat.util.threads.ThreadPool$Contr olRunnable) at java.lang.Thread.run(Thread.java:595) "http-8080-Processor15" daemon prio=5 tid=0x26d35b80 nid=0x22d4 in Object.wait() [0x2836f000..0x2836fae8] at java.lang.Object.wait(Native Method) - waiting on <0x02c501e0> (a org.apache.tomcat.util.threads.ThreadPool$C ontrolRunnable) at java.lang.Object.wait(Object.java:474) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadP ool.java:656) - locked <0x02c501e0> (a org.apache.tomcat.util.threads.ThreadPool$Contr olRunnable) at java.lang.Thread.run(Thread.java:595) "http-8080-Processor14" daemon prio=5 tid=0x272eebf0 nid=0xae8 in Object.wait() [0x2832f000..0x2832fb68] at java.lang.Object.wait(Native Method) - waiting on <0x02c4fd58> (a org.apache.tomcat.util.threads.ThreadPool$C ontrolRunnable) at java.lang.Object.wait(Object.java:474) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadP ool.java:656) - locked <0x02c4fd58> (a org.apache.tomcat.util.threads.ThreadPool$Contr olRunnable) at java.lang.Thread.run(Thread.java:595) "http-8080-Processor13" daemon prio=5 tid=0x26e42768 nid=0x2150 in Object.wait() [0x282ef000..0x282efbe8] at java.lang.Object.wait(Native Method) - waiting on <0x02c4f960> (a org.apache.tomcat.util.threads.ThreadPool$C ontrolRunnable) at java.lang.Object.wait(Object.java:474) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadP ool.java:656) - locked <0x02c4f960> (a org.apache.tomcat.util.threads.ThreadPool$Contr olRunnable) at java.lang.Thread.run(Thread.java:595) "http-8080-Processor12" daemon prio=5 tid=0x2761ed38 nid=0x838 in Object.wait() [0x282af000..0x282afc68] at java.lang.Object.wait(Native Method) - waiting on <0x02c4f568> (a org.apache.tomcat.util.threads.ThreadPool$C ontrolRunnable) at java.lang.Object.wait(Object.java:474) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadP ool.java:656) - locked <0x02c4f568> (a org.apache.tomcat.util.threads.ThreadPool$Contr olRunnable) at java.lang.Thread.run(Thread.java:595) "http-8080-Processor11" daemon prio=5 tid=0x277ca408 nid=0x238c in Object.wait() [0x2826f000..0x2826fce8] at java.lang.Object.wait(Native Method) - waiting on <0x02c4f170> (a org.apache.tomcat.util.threads.ThreadPool$C ontrolRunnable) at java.lang.Object.wait(Object.java:474) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadP ool.java:656) - locked <0x02c4f170> (a org.apache.tomcat.util.threads.ThreadPool$Contr olRunnable) at java.lang.Thread.run(Thread.java:595) "http-8080-Processor10" daemon prio=5 tid=0x274aee18 nid=0xd88 in Object.wait() [0x2822f000..0x2822fd68] at java.lang.Object.wait(Native Method) - waiting on <0x02c4ed78> (a org.apache.tomcat.util.threads.ThreadPool$C ontrolRunnable) at java.lang.Object.wait(Object.java:474) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadP ool.java:656) - locked <0x02c4ed78> (a org.apache.tomcat.util.threads.ThreadPool$Contr olRunnable) at java.lang.Thread.run(Thread.java:595) "http-8080-Processor9" daemon prio=5 tid=0x27791e68 nid=0x15d8 in Object.wait() [0x281ef000..0x281ef9e8] at java.lang.Object.wait(Native Method) - waiting on <0x02c4e918> (a org.apache.tomcat.util.threads.ThreadPool$C ontrolRunnable) at java.lang.Object.wait(Object.java:474) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadP ool.java:656) - locked <0x02c4e918> (a org.apache.tomcat.util.threads.ThreadPool$Contr olRunnable) at java.lang.Thread.run(Thread.java:595) "http-8080-Processor8" daemon prio=5 tid=0x275a2a88 nid=0x177c in Object.wait() [0x281af000..0x281afa68] at java.lang.Object.wait(Native Method) - waiting on <0x02c4e520> (a org.apache.tomcat.util.threads.ThreadPool$C ontrolRunnable) at java.lang.Object.wait(Object.java:474) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadP ool.java:656) - locked <0x02c4e520> (a org.apache.tomcat.util.threads.ThreadPool$Contr olRunnable) at java.lang.Thread.run(Thread.java:595) "http-8080-Processor7" daemon prio=5 tid=0x271e6a70 nid=0x624 in Object.wait() [ 0x2816f000..0x2816fae8] at java.lang.Object.wait(Native Method) - waiting on <0x02c4e128> (a org.apache.tomcat.util.threads.ThreadPool$C ontrolRunnable) at java.lang.Object.wait(Object.java:474) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadP ool.java:656) - locked <0x02c4e128> (a org.apache.tomcat.util.threads.ThreadPool$Contr olRunnable) at java.lang.Thread.run(Thread.java:595) "http-8080-Processor6" daemon prio=5 tid=0x2705eb50 nid=0x1828 in Object.wait() [0x2812f000..0x2812fb68] at java.lang.Object.wait(Native Method) - waiting on <0x02c4dce0> (a org.apache.tomcat.util.threads.ThreadPool$C ontrolRunnable) at java.lang.Object.wait(Object.java:474) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadP ool.java:656) - locked <0x02c4dce0> (a org.apache.tomcat.util.threads.ThreadPool$Contr olRunnable) at java.lang.Thread.run(Thread.java:595) "http-8080-Processor5" daemon prio=5 tid=0x2736b2c0 nid=0x1c30 in Object.wait() [0x280ef000..0x280efbe8] at java.lang.Object.wait(Native Method) - waiting on <0x02c4d8e8> (a org.apache.tomcat.util.threads.ThreadPool$C ontrolRunnable) at java.lang.Object.wait(Object.java:474) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadP ool.java:656) - locked <0x02c4d8e8> (a org.apache.tomcat.util.threads.ThreadPool$Contr olRunnable) at java.lang.Thread.run(Thread.java:595) "http-8080-Processor4" daemon prio=5 tid=0x27099e90 nid=0x1960 in Object.wait() [0x280af000..0x280afc68] at java.lang.Object.wait(Native Method) - waiting on <0x02c4d4f0> (a org.apache.tomcat.util.threads.ThreadPool$C ontrolRunnable) at java.lang.Object.wait(Object.java:474) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadP ool.java:656) - locked <0x02c4d4f0> (a org.apache.tomcat.util.threads.ThreadPool$Contr olRunnable) at java.lang.Thread.run(Thread.java:595) "http-8080-Processor3" daemon prio=5 tid=0x26e28eb0 nid=0x2694 in Object.wait() [0x2806f000..0x2806fce8] at java.lang.Object.wait(Native Method) - waiting on <0x02c4d0f8> (a org.apache.tomcat.util.threads.ThreadPool$C ontrolRunnable) at java.lang.Object.wait(Object.java:474) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadP ool.java:656) - locked <0x02c4d0f8> (a org.apache.tomcat.util.threads.ThreadPool$Contr olRunnable) at java.lang.Thread.run(Thread.java:595) "http-8080-Processor2" daemon prio=5 tid=0x2743f790 nid=0x2384 in Object.wait() [0x2802f000..0x2802fd68] at java.lang.Object.wait(Native Method) - waiting on <0x02c4ccd0> (a org.apache.tomcat.util.threads.ThreadPool$C ontrolRunnable) at java.lang.Object.wait(Object.java:474) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadP ool.java:656) - locked <0x02c4ccd0> (a org.apache.tomcat.util.threads.ThreadPool$Contr olRunnable) at java.lang.Thread.run(Thread.java:595) "http-8080-Processor1" daemon prio=5 tid=0x272e3208 nid=0x16e0 in Object.wait() [0x27e2f000..0x27e2f9e8] at java.lang.Object.wait(Native Method) - waiting on <0x02c4c8d8> (a org.apache.tomcat.util.threads.ThreadPool$C ontrolRunnable) at java.lang.Object.wait(Object.java:474) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadP ool.java:656) - locked <0x02c4c8d8> (a org.apache.tomcat.util.threads.ThreadPool$Contr olRunnable) at java.lang.Thread.run(Thread.java:595) "ContainerBackgroundProcessor[StandardEngine[Catalina]]" daemon prio=5 tid=0x272 d4df8 nid=0x1af0 waiting on condition [0x27def000..0x27defa68] at java.lang.Thread.sleep(Native Method) at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.r un(ContainerBase.java:1546) at java.lang.Thread.run(Thread.java:595) "RMI LeaseChecker" daemon prio=5 tid=0x2743e560 nid=0xd7c waiting on condition [ 0x27faf000..0x27fafd68] at java.lang.Thread.sleep(Native Method) at sun.rmi.transport.DGCImpl$LeaseChecker.run(DGCImpl.java:310) at java.lang.Thread.run(Thread.java:595) "RMI RenewClean-[127.0.0.1:4257]" daemon prio=5 tid=0x27351d18 nid=0x1700 in Obj ect.wait() [0x27f2f000..0x27f2fa68] at java.lang.Object.wait(Native Method) - waiting on <0x0a2a1900> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:116) - locked <0x0a2a1900> (a java.lang.ref.ReferenceQueue$Lock) at sun.rmi.transport.DGCClient$EndpointEntry$RenewCleanThread.run(DGCCli ent.java:500) at java.lang.Thread.run(Thread.java:595) "GC Daemon" daemon prio=2 tid=0x270295c0 nid=0x27ac in Object.wait() [0x27eef000 ..0x27eefae8] at java.lang.Object.wait(Native Method) - waiting on <0x0a2a19e0> (a sun.misc.GC$LatencyLock) at sun.misc.GC$Daemon.run(GC.java:100) - locked <0x0a2a19e0> (a sun.misc.GC$LatencyLock) "RMI Reaper" prio=5 tid=0x26d55bc8 nid=0x1068 in Object.wait() [0x27eaf000..0x27 eafb68] at java.lang.Object.wait(Native Method) - waiting on <0x0a151240> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:116) - locked <0x0a151240> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:132) at sun.rmi.transport.ObjectTable$Reaper.run(ObjectTable.java:336) at java.lang.Thread.run(Thread.java:595) "RMI TCP Accept-0" daemon prio=5 tid=0x2762c008 nid=0x1554 runnable [0x27e6f000. .0x27e6fbe8] at java.net.PlainSocketImpl.socketAccept(Native Method) at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:384) - locked <0x0a195830> (a java.net.SocksSocketImpl) at java.net.ServerSocket.implAccept(ServerSocket.java:450) at java.net.ServerSocket.accept(ServerSocket.java:421) at sun.rmi.transport.tcp.TCPTransport.run(TCPTransport.java:334) at java.lang.Thread.run(Thread.java:595) "RMI TCP Accept-7132" daemon prio=5 tid=0x26e2ccc0 nid=0x2128 runnable [0x27daf0 00..0x27dafd68] at java.net.PlainSocketImpl.socketAccept(Native Method) at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:384) - locked <0x0a151c68> (a java.net.SocksSocketImpl) at java.net.ServerSocket.implAccept(ServerSocket.java:450) at java.net.ServerSocket.accept(ServerSocket.java:421) at sun.rmi.transport.tcp.TCPTransport.run(TCPTransport.java:334) at java.lang.Thread.run(Thread.java:595) "Timer-0" daemon prio=5 tid=0x27300e00 nid=0x2030 in Object.wait() [0x27d6f000.. 0x27d6f9e8] at java.lang.Object.wait(Native Method) - waiting on <0x0a1513f0> (a java.util.TaskQueue) at java.util.TimerThread.mainLoop(Timer.java:509) - locked <0x0a1513f0> (a java.util.TaskQueue) at java.util.TimerThread.run(Timer.java:462) "Low Memory Detector" daemon prio=5 tid=0x26d15900 nid=0x1ad4 runnable [0x000000 00..0x00000000] "CompilerThread0" daemon prio=10 tid=0x0099e968 nid=0x13a8 waiting on condition [0x00000000..0x26f7f8cc] "Signal Dispatcher" daemon prio=10 tid=0x0099f620 nid=0x23c4 waiting on conditio n [0x00000000..0x00000000] "Finalizer" daemon prio=9 tid=0x00959410 nid=0x1b54 in Object.wait() [0x26cff000 ..0x26cffc68] at java.lang.Object.wait(Native Method) - waiting on <0x05190898> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:116) - locked <0x05190898> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:132) at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:159) "Reference Handler" daemon prio=10 tid=0x00957f80 nid=0x1520 in Object.wait() [0 x26cbf000..0x26cbfce8] at java.lang.Object.wait(Native Method) - waiting on <0x05190918> (a java.lang.ref.Reference$Lock) at java.lang.Object.wait(Object.java:474) at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:116) - locked <0x05190918> (a java.lang.ref.Reference$Lock) "main" prio=5 tid=0x00038678 nid=0xd48 waiting for monitor entry [0x0007e000..0x 0007fc3c] at java.lang.ClassLoader.loadClass(ClassLoader.java:295) - waiting to lock <0x05291098> (a org.apache.catalina.loader.StandardCla ssLoader) at java.lang.ClassLoader.loadClass(ClassLoader.java:251) at org.xml.sax.helpers.NewInstance.newInstance(NewInstance.java:49) at org.xml.sax.helpers.XMLReaderFactory.loadClass(XMLReaderFactory.java: 187) at org.xml.sax.helpers.XMLReaderFactory.createXMLReader(XMLReaderFactory .java:150) at org.aspectj.weaver.loadtime.definition.DocumentParser.parse(DocumentP arser.java:80) at org.aspectj.weaver.loadtime.ClassLoaderWeavingAdaptor.registerDefinit ions(ClassLoaderWeavingAdaptor.java:125) at org.aspectj.weaver.loadtime.ClassLoaderWeavingAdaptor.<init>(ClassLoa derWeavingAdaptor.java:93) at org.aspectj.weaver.loadtime.Aj$WeaverContainer.getWeaver(Aj.java:81) - locked <0x051a1398> (a java.util.WeakHashMap) - locked <0x02d43c78> (a sun.reflect.DelegatingClassLoader) at org.aspectj.weaver.loadtime.Aj.preProcess(Aj.java:54) at org.aspectj.weaver.loadtime.ClassPreProcessorAgentAdapter.transform(C lassPreProcessorAgentAdapter.java:52) at sun.instrument.TransformerManager.transform(TransformerManager.java:1 22) at sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java :155) at sun.misc.Unsafe.defineClass(Native Method) at sun.reflect.ClassDefiner.defineClass(ClassDefiner.java:45) at sun.reflect.MethodAccessorGenerator$1.run(MethodAccessorGenerator.jav a:381) at java.security.AccessController.doPrivileged(Native Method) at sun.reflect.MethodAccessorGenerator.generate(MethodAccessorGenerator. java:377) at sun.reflect.MethodAccessorGenerator.generateMethod(MethodAccessorGene rator.java:59) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl. java:28) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces sorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.apache.commons.modeler.BaseModelMBean.invoke(BaseModelMBean.java: 503) at com.sun.jmx.mbeanserver.DynamicMetaDataImpl.invoke(DynamicMetaDataImp l.java:213) at com.sun.jmx.mbeanserver.MetaDataImpl.invoke(MetaDataImpl.java:220) at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultM BeanServerInterceptor.java:815) at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:784 ) at org.apache.catalina.connector.MapperListener.registerWrapper(MapperLi stener.java:487) at org.apache.catalina.connector.MapperListener.init(MapperListener.java :140) at org.apache.catalina.connector.Connector.start(Connector.java:1011) at org.apache.catalina.core.StandardService.start(StandardService.java:4 59) - locked <0x0728e818> (a [Lorg.apache.catalina.connector.Connector;) at org.apache.catalina.core.StandardServer.start(StandardServer.java:683 ) - locked <0x073277a8> (a [Lorg.apache.catalina.Service;) at org.apache.catalina.startup.Catalina.start(Catalina.java:537) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl. java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces sorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:271) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:409) "VM Thread" prio=10 tid=0x0003f110 nid=0x2514 runnable "VM Periodic Task Thread" prio=10 tid=0x26d12a88 nid=0x165c waiting on condition Found one Java-level deadlock: ============================= "http-8080-Processor25": waiting to lock monitor 0x0095900c (object 0x051a1398, a java.util.WeakHashMap ), which is held by "main" "main": waiting to lock monitor 0x00958fac (object 0x05291098, a org.apache.catalina.l oader.StandardClassLoader), which is held by "http-8080-Processor25" Java stack information for the threads listed above: =================================================== "http-8080-Processor25": at org.aspectj.weaver.loadtime.Aj$WeaverContainer.getWeaver(Aj.java:79) - waiting to lock <0x051a1398> (a java.util.WeakHashMap) - locked <0x05291098> (a org.apache.catalina.loader.StandardClassLoader) at org.aspectj.weaver.loadtime.Aj.preProcess(Aj.java:54) at org.aspectj.weaver.loadtime.ClassPreProcessorAgentAdapter.transform(C lassPreProcessorAgentAdapter.java:52) at sun.instrument.TransformerManager.transform(TransformerManager.java:1 22) at sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java :155) at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:620) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:12 4) at java.net.URLClassLoader.defineClass(URLClassLoader.java:260) at java.net.URLClassLoader.access$100(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 java.lang.ClassLoader.loadClass(ClassLoader.java:306) - locked <0x05291098> (a org.apache.catalina.loader.StandardClassLoader) at java.lang.ClassLoader.loadClass(ClassLoader.java:251) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319) - locked <0x05291098> (a org.apache.catalina.loader.StandardClassLoader) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.init( Http11Protocol.java:683) at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.getInitData(Lea derFollowerWorkerThread.java:48) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadP ool.java:673) at java.lang.Thread.run(Thread.java:595) "main": at java.lang.ClassLoader.loadClass(ClassLoader.java:295) - waiting to lock <0x05291098> (a org.apache.catalina.loader.StandardCla ssLoader) at java.lang.ClassLoader.loadClass(ClassLoader.java:251) at org.xml.sax.helpers.NewInstance.newInstance(NewInstance.java:49) at org.xml.sax.helpers.XMLReaderFactory.loadClass(XMLReaderFactory.java: 187) at org.xml.sax.helpers.XMLReaderFactory.createXMLReader(XMLReaderFactory .java:150) at org.aspectj.weaver.loadtime.definition.DocumentParser.parse(DocumentP arser.java:80) at org.aspectj.weaver.loadtime.ClassLoaderWeavingAdaptor.registerDefinit ions(ClassLoaderWeavingAdaptor.java:125) at org.aspectj.weaver.loadtime.ClassLoaderWeavingAdaptor.<init>(ClassLoa derWeavingAdaptor.java:93) at org.aspectj.weaver.loadtime.Aj$WeaverContainer.getWeaver(Aj.java:81) - locked <0x051a1398> (a java.util.WeakHashMap) - locked <0x02d43c78> (a sun.reflect.DelegatingClassLoader) at org.aspectj.weaver.loadtime.Aj.preProcess(Aj.java:54) at org.aspectj.weaver.loadtime.ClassPreProcessorAgentAdapter.transform(C lassPreProcessorAgentAdapter.java:52) at sun.instrument.TransformerManager.transform(TransformerManager.java:1 22) at sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java :155) at sun.misc.Unsafe.defineClass(Native Method) at sun.reflect.ClassDefiner.defineClass(ClassDefiner.java:45) at sun.reflect.MethodAccessorGenerator$1.run(MethodAccessorGenerator.jav a:381) at java.security.AccessController.doPrivileged(Native Method) at sun.reflect.MethodAccessorGenerator.generate(MethodAccessorGenerator. java:377) at sun.reflect.MethodAccessorGenerator.generateMethod(MethodAccessorGene rator.java:59) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl. java:28) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces sorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.apache.commons.modeler.BaseModelMBean.invoke(BaseModelMBean.java: 503) at com.sun.jmx.mbeanserver.DynamicMetaDataImpl.invoke(DynamicMetaDataImp l.java:213) at com.sun.jmx.mbeanserver.MetaDataImpl.invoke(MetaDataImpl.java:220) at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultM BeanServerInterceptor.java:815) at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:784 ) at org.apache.catalina.connector.MapperListener.registerWrapper(MapperLi stener.java:487) at org.apache.catalina.connector.MapperListener.init(MapperListener.java :140) at org.apache.catalina.connector.Connector.start(Connector.java:1011) at org.apache.catalina.core.StandardService.start(StandardService.java:4 59) - locked <0x0728e818> (a [Lorg.apache.catalina.connector.Connector;) at org.apache.catalina.core.StandardServer.start(StandardServer.java:683 ) - locked <0x073277a8> (a [Lorg.apache.catalina.Service;) at org.apache.catalina.startup.Catalina.start(Catalina.java:537) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl. java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces sorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:271) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:409) Found 1 deadlock.
On looking more closely, it looks like the original work-around is now causing a deadlock. On the other hand, is it really necessary to hold the lock while reading in definitions? Or if it is, why not use class.forName to ensure the needed classes all get loaded before the lock is acquired. Why not construct the Adaptor with no work, then release the locks and initialize the Adaptor? You would then want to synchronize on the init method and before returning the adaptor... to be thread safe you would need to use something like Doug Lea's concurrency library to lock the newly constructed object inside the other synchronized blocks & yet return it after the others finish. Just some thoughts...
obviously this is a consequence of the poor hack of #99861 which consist in locking the classloader within which we are weaving to bypass some proven bugs in Sun JSR163 implementation. You may try to remove the fix for 99861 in Aj.java, rebuild, get a fresh Sun VM and try again with Tomcat and let us know.
deps
A thought: might the issue be with Tomcat? Don't Tomcat application class loaders check their own definitions first, with the result that class inter-dependencies across application class loaders are not serialized as they are under the usual delegation scheme? It would be nice to see this reproduced outside Tomcat.
closing this one see deps.
Apologies is this comment is posted twice -- I posted a more in-depth comment yesterday which doesn't seem to have appeared yet. I have experienced this problem whilst advising a multi-threaded application on IBM's 5.0 beta SDK and Sun's 5.0. I'm not using tomcat or any other loader. This was on the 3rd Nov development AspectJ build. What is the significance of RESOLVED REMIND? I don't think this has been resolved. Are there plans to fix it? Thanks, Dave
Dave Your detailled comment does not appear. Please post it again. RESOLVED REMIND means that this is FIXED and needs to be marked as FIXED when we ship our next official milestone / RC / release (at least I am using this status for that purpose). Please post thread dump and possibly app to reproduce the issue you have on that issue.
Hi Alexandre. Thanks for your comment. After you said that you thought it was fixed, I spent a little more time testing. After I tried completely deleting my stable aspectj directory and replacing it with the 3rd Nov development build, the issue went away. I guess I need to learn how this all fits together better :-) Good work, and sorry to waste your time! Dave
LATER/REMIND bugs are being automatically reopened as P5 because the LATER and REMIND resolutions are deprecated.