You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Matt Whipple (JIRA)" <ji...@apache.org> on 2017/09/20 16:01:00 UTC

[jira] [Comment Edited] (GROOVY-8324) Enabling groovy.indy.logging can lead to stack overflows

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

Matt Whipple edited comment on GROOVY-8324 at 9/20/17 4:00 PM:
---------------------------------------------------------------

Other domain classes are also resulting in similar issues, all of which are relying on the {{@ToString}} AST Transformation.  Here's another trace for another class which seems to be getting stuck while stringifying the enumerated arguments during the same logging block:
{noformat}
! java.lang.StackOverflowError: null
! at org.codehaus.groovy.vmplugin.v7.IndyInterface$CALL_TYPES.values(IndyInterface.java:55)
! at org.codehaus.groovy.vmplugin.v7.Selector.getSelector(Selector.java:95)
! at org.codehaus.groovy.vmplugin.v7.IndyInterface.selectMethod(IndyInterface.java:227)
! at foo.PendingChange.toString(PendingChangeDAO.groovy)
! at java.lang.String.valueOf(String.java:2982)
! at java.lang.StringBuilder.append(StringBuilder.java:131)
! at org.codehaus.groovy.vmplugin.v7.Selector$MethodSelector.<init>(Selector.java:499)
! at org.codehaus.groovy.vmplugin.v7.Selector.getSelector(Selector.java:98)
! at org.codehaus.groovy.vmplugin.v7.IndyInterface.selectMethod(IndyInterface.java:227)
! at foo.PendingChange.toString(PendingChangeDAO.groovy)
! at java.lang.String.valueOf(String.java:2982)
! at java.lang.StringBuilder.append(StringBuilder.java:131)
! at org.codehaus.groovy.vmplugin.v7.Selector$MethodSelector.<init>(Selector.java:499)
! at org.codehaus.groovy.vmplugin.v7.Selector.getSelector(Selector.java:98)
! at org.codehaus.groovy.vmplugin.v7.IndyInterface.selectMethod(IndyInterface.java:227)
! at foo.PendingChange.toString(PendingChangeDAO.groovy)
{noformat}

I'm not done looking at the primary issue yet after all but I'll likely try to circle back to this shortly and see if I can debug it a bit.


was (Author: mwhipple):
Other domain classes are also resulting in similar issues, all of which are relying on the {{@ToString}} AST Transformation.  Here's another trace for another class which seems to be getting stuck while stringifying the enumerated arguments during the same logging block:
{noformat}
! java.lang.StackOverflowError: null
! at org.codehaus.groovy.vmplugin.v7.IndyInterface$CALL_TYPES.values(IndyInterface.java:55)
! at org.codehaus.groovy.vmplugin.v7.Selector.getSelector(Selector.java:95)
! at org.codehaus.groovy.vmplugin.v7.IndyInterface.selectMethod(IndyInterface.java:227)
! at foo.PendingChange.toString(PendingChangeDAO.groovy)
! at java.lang.String.valueOf(String.java:2982)
! at java.lang.StringBuilder.append(StringBuilder.java:131)
! at org.codehaus.groovy.vmplugin.v7.Selector$MethodSelector.<init>(Selector.java:499)
! at org.codehaus.groovy.vmplugin.v7.Selector.getSelector(Selector.java:98)
! at org.codehaus.groovy.vmplugin.v7.IndyInterface.selectMethod(IndyInterface.java:227)
! at foo.PendingChange.toString(PendingChangeDAO.groovy)
! at java.lang.String.valueOf(String.java:2982)
! at java.lang.StringBuilder.append(StringBuilder.java:131)
! at org.codehaus.groovy.vmplugin.v7.Selector$MethodSelector.<init>(Selector.java:499)
! at org.codehaus.groovy.vmplugin.v7.Selector.getSelector(Selector.java:98)
! at org.codehaus.groovy.vmplugin.v7.IndyInterface.selectMethod(IndyInterface.java:227)
! at foo.PendingChange.toString(PendingChangeDAO.groovy)
{noformat}

I'm not done looking at the primary issue yet after all but I'll likely try to circle back to this in a bit and see if I can debug it a bit.

> 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)