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

Matt Whipple commented on GROOVY-8324:
--------------------------------------

Your bet was correct...the logging was cycling on a getter trying to stringify 
the {{this}} argument where the toString() invoked that getter. I opened a PR 
for what seems like a reasonable way to avoid this by not logging the {{this}} 
argument:

https://github.com/apache/groovy/pull/604

Sample output from the git project above:

instance method:
{noformat}
    INFO: ----------------------------------------------------
                invocation of method 'getName'
                invocation type: METHOD
                sender: class gt.MyOtherObject
                targetType: (MyOtherObject)Object
                safe navigation: false
                thisCall: true
                spreadCall: false
                with 1 arguments (including 'this')
{noformat}

non-instance method (unchanged):
{noformat}
    INFO: ----------------------------------------------------
                invocation of method 'append'
                invocation type: METHOD
                sender: class gt.MyOtherObject
                targetType: (Object,Object)Object
                safe navigation: false
                thisCall: false
                spreadCall: false
                with 2 arguments
                        argument[0] = gt.MyOtherObject(
                        argument[1] = test0
{noformat}

> Enabling groovy.indy.logging can lead to stack overflows
> --------------------------------------------------------
>
>                 Key: GROOVY-8324
>                 URL: https://issues.apache.org/jira/browse/GROOVY-8324
>             Project: Groovy
>          Issue Type: Bug
>    Affects Versions: 2.4.12
>            Reporter: Matt Whipple
>            Priority: Minor
>              Labels: invokedynamic
>
> Still digging through this a bit more, but while trying to diagnose 
> performance issues I enabled indy logging which led to:
> {noformat}
> ! Caused by: java.lang.StackOverflowError: null
> ! at java.lang.Class.getEnclosingMethodInfo(Class.java:1072)
> ! at java.lang.Class.getEnclosingClass(Class.java:1272)
> ! at java.lang.Class.getSimpleBinaryName(Class.java:1443)
> ! at java.lang.Class.getSimpleName(Class.java:1309)
> ! at java.lang.invoke.MethodType.toString(MethodType.java:797)
> ! at java.lang.String.valueOf(String.java:2982)                        <--- 
> Loops back to here
> ! at java.lang.StringBuilder.append(StringBuilder.java:131)
> ! at 
> org.codehaus.groovy.vmplugin.v7.Selector$MethodSelector.<init>(Selector.java:488)
> ! at org.codehaus.groovy.vmplugin.v7.Selector.getSelector(Selector.java:98)
> ! at 
> org.codehaus.groovy.vmplugin.v7.IndyInterface.selectMethod(IndyInterface.java:227)
> ! at MyDomainClass.toString(MyDomainClass.groovy)
> {noformat}
> The domain class itself stringifies without issue, changing the class to use 
> {{@CompileStatic}} seems to have resolved this issue. It might be nice if 
> that specific log message could be toggled independently of the others to try 
> to avoid the possibility of blowing up while attempting to troubleshooting. 
> {noformat}
> java version "1.8.0_45"
> Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
> Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)
> {noformat}



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to