Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
1.7.1
-
None
-
None
Description
Two threads calling GroovyShell.parse from the same GroovyShell instance enter in deadlock (see the stack below).
I'm not sure whether this multi-threaded use is supposed to be supported or not, so feel free to reject it in case GroovyShell is supposed to be used only from one thread or from multiple threads but with explicit synchronization.
Anyway this seems similar to GROOVY-4050
Java stack information for the threads listed above:
===================================================
"pool-4-thread-2":
at groovy.lang.GroovyClassLoader.loadClass(GroovyClassLoader.java:712)
- waiting to lock <0x00002aaab42d2a50> (a java.util.HashMap)
at groovy.lang.GroovyClassLoader$InnerLoader.loadClass(GroovyClassLoader.java:426)
at groovy.lang.GroovyClassLoader.loadClass(GroovyClassLoader.java:773)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
at java.beans.Introspector.instantiate(Introspector.java:1453)
at java.beans.Introspector.findExplicitBeanInfo(Introspector.java:425) - locked <0x00002aaaaecd26c0> (a java.lang.Class for java.beans.Introspector)
at java.beans.Introspector.<init>(Introspector.java:374)
at java.beans.Introspector.getBeanInfo(Introspector.java:168)
at groovy.lang.MetaClassImpl$15.run(MetaClassImpl.java:2931)
at java.security.AccessController.doPrivileged(Native Method)
at groovy.lang.MetaClassImpl.addProperties(MetaClassImpl.java:2929)
at groovy.lang.MetaClassImpl.initialize(MetaClassImpl.java:2912) - locked <0x00002aaad57f7700> (a groovy.lang.MetaClassImpl)
at org.codehaus.groovy.reflection.ClassInfo.getMetaClassUnderLock(ClassInfo.java:166)
at org.codehaus.groovy.reflection.ClassInfo.getMetaClass(ClassInfo.java:182)
at org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.getMetaClass(MetaClassRegistryImpl.java:211)
at org.codehaus.groovy.runtime.InvokerHelper.getMetaClass(InvokerHelper.java:701)
at groovy.lang.GroovyObjectSupport.<init>(GroovyObjectSupport.java:32)
at groovy.lang.Script.<init>(Script.java:40)
at groovy.lang.Script.<init>(Script.java:37)
at Script288.<init>(Script288.groovy)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at java.lang.Class.newInstance0(Class.java:355)
at java.lang.Class.newInstance(Class.java:308)
at org.codehaus.groovy.runtime.InvokerHelper.createScript(InvokerHelper.java:400)
at groovy.lang.GroovyShell.parse(GroovyShell.java:739)
at groovy.lang.GroovyShell.parse(GroovyShell.java:766)
at groovy.lang.GroovyShell.parse(GroovyShell.java:757)
at com.iontrading.punit.itdb.c.<init>(SupplyProcessorUnit.java:68)
at com.iontrading.punit.itdb.a.<init>(SupplyProcessorUnit.java:162)
at com.iontrading.punit.itdb.SupplyProcessorUnit.processUpdate(SupplyProcessorUnit.java:266)
at com.iontrading.punit.core.PUnitBase.notifySinks(PUnitBase.java:83)
at com.iontrading.punit.jdbc.JDBCQueryUnit.notifySinks(JDBCQueryUnit.java:744)
at com.iontrading.punit.jdbc.JDBCQueryUnit$a.run(JDBCQueryUnit.java:493)
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)
"pool-6-thread-1":
at java.beans.Introspector.getPublicDeclaredMethods(Introspector.java:1271) - waiting to lock <0x00002aaaaecd26c0> (a java.lang.Class for java.beans.Introspector)
at java.beans.Introspector.internalFindMethod(Introspector.java:1321)
at java.beans.Introspector.findMethod(Introspector.java:1392)
at java.beans.Introspector.findMethod(Introspector.java:1372)
at java.beans.PropertyDescriptor.getReadMethod(PropertyDescriptor.java:179) - locked <0x00002aaab4279358> (a java.beans.PropertyDescriptor)
at groovy.lang.MetaClassImpl.applyPropertyDescriptors(MetaClassImpl.java:2209)
at groovy.lang.MetaClassImpl.setupProperties(MetaClassImpl.java:1993)
at groovy.lang.MetaClassImpl.addProperties(MetaClassImpl.java:2941)
at groovy.lang.MetaClassImpl.initialize(MetaClassImpl.java:2912) - locked <0x00002aaad58d5290> (a groovy.lang.MetaClassImpl)
at org.codehaus.groovy.reflection.ClassInfo.getMetaClassUnderLock(ClassInfo.java:166)
at org.codehaus.groovy.reflection.ClassInfo.getMetaClass(ClassInfo.java:195)
at org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.getMetaClass(MetaClassRegistryImpl.java:215)
at org.codehaus.groovy.runtime.InvokerHelper.getMetaClass(InvokerHelper.java:697)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.createPojoSite(CallSiteArray.java:107)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.createCallSite(CallSiteArray.java:148)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:40)
at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite.call(PojoMetaMethodSite.java:54)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125)
at org.codehaus.groovy.ast.builder.AstBuilderInvocationTrap.visitMethodCallExpression(AstBuilderTransformation.groovy:177)
at org.codehaus.groovy.ast.expr.MethodCallExpression.visit(MethodCallExpression.java:67)
at org.codehaus.groovy.ast.CodeVisitorSupport.visitExpressionStatement(CodeVisitorSupport.java:69)
at org.codehaus.groovy.ast.stmt.ExpressionStatement.visit(ExpressionStatement.java:40)
at org.codehaus.groovy.ast.CodeVisitorSupport.visitBlockStatement(CodeVisitorSupport.java:35)
at org.codehaus.groovy.ast.stmt.BlockStatement.visit(BlockStatement.java:51)
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 org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite$PojoCachedMethodSiteNoUnwrapNoCoerce.invoke(PojoMetaMethodSite.java:229)
at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite.call(PojoMetaMethodSite.java:52)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callSafe(AbstractCallSite.java:90)
at org.codehaus.groovy.ast.builder.AstBuilderTransformation.visit(AstBuilderTransformation.groovy:57)
at org.codehaus.groovy.transform.ASTTransformationVisitor$3.call(ASTTransformationVisitor.java:303)
at org.codehaus.groovy.control.CompilationUnit.applyToSourceUnits(CompilationUnit.java:845)
at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:521)
at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:497)
at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:474)
at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:292) - locked <0x00002aaab42d2a50> (a java.util.HashMap)
at groovy.lang.GroovyShell.parseClass(GroovyShell.java:727)
at groovy.lang.GroovyShell.parse(GroovyShell.java:739)
at groovy.lang.GroovyShell.parse(GroovyShell.java:766)
at groovy.lang.GroovyShell.parse(GroovyShell.java:757)
at com.iontrading.punit.itdb.c.<init>(SupplyProcessorUnit.java:68)
at com.iontrading.punit.itdb.a.<init>(SupplyProcessorUnit.java:162)
at com.iontrading.punit.itdb.SupplyProcessorUnit.processUpdate(SupplyProcessorUnit.java:266)
at com.iontrading.punit.core.PUnitBase.notifySinks(PUnitBase.java:83)
at com.iontrading.punit.jdbc.JDBCQueryUnit.notifySinks(JDBCQueryUnit.java:744)
at com.iontrading.punit.jdbc.JDBCQueryUnit$a.run(JDBCQueryUnit.java:493)
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)
Attachments
Issue Links
- is related to
-
GROOVY-4050 Server-Deadlock through InvokerHelper.createScript/GroovyClassLoader.parseClass
- Closed
-
GROOVY-4002 deadlock in GroovyClassLoader
- Closed