Uploaded image for project: 'Groovy'
  1. Groovy
  2. GROOVY-4127

deadlock in concurrent calls of GroovyShell.parse method against the same GroovyShell object

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 1.7.1
    • 1.7.3
    • 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

          Activity

            People

              guillaume Guillaume Sauthier
              giamby Giambattista Bloisi
              Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: