You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@groovy.apache.org by Richard Harker <ri...@cytal.co.uk> on 2025/03/10 07:58:48 UTC
Intermittent Groovy stack overflow exceptions and hangs
Hi All.
We develop an OSGI Eclipse E4 based application which is written in a combination of Java and Groovy. The application makes use of Groovy templates dynamically loaded at runtime (to facilitate providing HTML reports) and provides provision for the user to provide Groovy scripts which are parsed and run by a GroovyShell at runtime.
For some time now we've been seeing issues with intermittent stack overflow exceptions and intermittent hangs - both when the application loads the Groovy templates and when the application compiles the Groovy scripts.
The stack overflow exceptions appear to be originating from Groovy and given the hangs appear to occur interchangeably for the stack overflow exceptions, our suspicion is that the hangs are potentially a different manifestation of the same underlying issue.
We've been using Groovy for some years, and when we were on Groovy 2.5.x did not see these issues at all. We see them on both Groovy 3.x and on 4.x, with them seemingly being more frequent on Groovy 4.x.
Has anyone else seen these types of issues? I've included two example stack traces below. I've truncated each stack trace in the middle of the repeating lines, so the email is not huge.
Example stack trace 1 - from when we saw the Stack Overflow Exception with latest Groovy (4.0.26), when the Groovy Shell parses a Groovy script.
!ENTRY com.protocrawler.jstdlib.core 4 0 2025-03-04 09:17:15.877
!MESSAGE FrameworkEvent ERROR
!STACK 0
java.lang.StackOverflowError
at java.base/java.lang.String.startsWith(String.java:2327)
at java.base/sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:97)
at java.base/sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:77)
at java.base/sun.nio.fs.WindowsPath.parse(WindowsPath.java:92)
at java.base/sun.nio.fs.WindowsFileSystem.getPath(WindowsFileSystem.java:231)
at java.base/java.util.zip.ZipFile$Source.get(ZipFile.java:1445)
at java.base/java.util.zip.ZipFile$CleanableResource.<init>(ZipFile.java:724)
at java.base/java.util.zip.ZipFile.<init>(ZipFile.java:251)
at java.base/java.util.zip.ZipFile.<init>(ZipFile.java:180)
at java.base/java.util.zip.ZipFile.<init>(ZipFile.java:194)
at org.eclipse.osgi.framework.util.SecureAction.getZipFile(SecureAction.java:353)
at org.eclipse.osgi.storage.bundlefile.ZipBundleFile.doOpen(ZipBundleFile.java:51)
at org.eclipse.osgi.storage.bundlefile.CloseableBundleFile.internalOpen(CloseableBundleFile.java:146)
at org.eclipse.osgi.storage.bundlefile.CloseableBundleFile.lockOpen(CloseableBundleFile.java:83)
at org.eclipse.osgi.storage.bundlefile.CloseableBundleFile.getEntry(CloseableBundleFile.java:285)
at org.eclipse.osgi.storage.bundlefile.BundleFile.getResourceURL(BundleFile.java:147)
at org.eclipse.osgi.internal.loader.classpath.ClasspathEntry.findResource(ClasspathEntry.java:228)
at org.eclipse.osgi.internal.loader.classpath.ClasspathManager.findLocalResourceImpl(ClasspathManager.java:462)
at org.eclipse.osgi.internal.loader.classpath.ClasspathManager.findLocalResourceImpl(ClasspathManager.java:441)
at org.eclipse.osgi.internal.loader.classpath.ClasspathManager.findLocalResource(ClasspathManager.java:412)
at org.eclipse.osgi.internal.loader.ModuleClassLoader.findLocalResource(ModuleClassLoader.java:340)
at org.eclipse.osgi.internal.loader.BundleLoader.findLocalResource(BundleLoader.java:952)
at org.eclipse.osgi.internal.loader.sources.SingleSourcePackage.getResource(SingleSourcePackage.java:46)
at org.eclipse.osgi.internal.loader.BundleLoader.findResource(BundleLoader.java:710)
at org.eclipse.osgi.internal.loader.ModuleClassLoader.getResource(ModuleClassLoader.java:212)
at java.base/java.lang.ClassLoader.getResource(ClassLoader.java:1413)
at org.codehaus.groovy.control.ClassNodeResolver.findDecompiled(ClassNodeResolver.java:252)
at org.codehaus.groovy.control.ClassNodeResolver.tryAsLoaderClassOrScript(ClassNodeResolver.java:193)
at org.codehaus.groovy.control.ClassNodeResolver.findClassNode(ClassNodeResolver.java:175)
at org.codehaus.groovy.control.ClassNodeResolver.resolveName(ClassNodeResolver.java:129)
at org.codehaus.groovy.ast.decompiled.AsmReferenceResolver.resolveClassNullable(AsmReferenceResolver.java:57)
at org.codehaus.groovy.ast.decompiled.AsmReferenceResolver.resolveClass(AsmReferenceResolver.java:44)
at org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:113)
at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:206)
at groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.java:124)
at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSignature(ClassSignatureParser.java:111)
at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass(ClassSignatureParser.java:35)
at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(DecompiledClassNode.java:189)
at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTypes(DecompiledClassNode.java:148)
at org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:125)
at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:206)
at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:240)
at groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.java:124)
at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSignature(ClassSignatureParser.java:111)
at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass(ClassSignatureParser.java:35)
at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(DecompiledClassNode.java:189)
at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTypes(DecompiledClassNode.java:148)
at org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:125)
at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:206)
at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:240)
at groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.java:124)
at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSignature(ClassSignatureParser.java:111)
at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass(ClassSignatureParser.java:35)
at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(DecompiledClassNode.java:189)
at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTypes(DecompiledClassNode.java:148)
at org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:125)
at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:206)
at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:240)
at groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.java:124)
<<removed ~900 lines to make the email shorter>>
at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSignature(ClassSignatureParser.java:111)
at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass(ClassSignatureParser.java:35)
at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(DecompiledClassNode.java:189)
at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTypes(DecompiledClassNode.java:148)
at org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:125)
at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:206)
at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:240)
at groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.java:124)
at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSignature(ClassSignatureParser.java:111)
at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass(ClassSignatureParser.java:35)
at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(DecompiledClassNode.java:189)
at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTypes(DecompiledClassNode.java:148)
at org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:125)
at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:206)
at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:240)
at groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.java:124)
at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSignature(ClassSignatureParser.java:111)
at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass(ClassSignatureParser.java:35)
at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(DecompiledClassNode.java:189)
at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTypes(DecompiledClassNode.java:148)
at org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:125)
Example 2 - The stack overflow seen with Groovy 3.0.23 when parsing one of our TPL template files:
OpenJDK 64-Bit Server VM warning: Potentially dangerous stack overflow in ReservedStackAccess annotated method java.util.concurrent.locks.ReentrantReadWriteLock$Sync.tryAcquireShared(I)I [1]
[ERROR] Unhandled HTML reporter exception
java.lang.IllegalStateException: Unexpected error loading template PacketTrace
at com.protocrawler.jtf.reporting.testexecution.html.TemplateManagementService.<init>(TemplateManagementService.java:115)
at com.protocrawler.jtf.reporting.testexecution.html.TemplateManagementService.getTemplateManagementService(TemplateManagementService.java:51)
at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:318)
at com.protocrawler.jtf.reporting.testexecution.html.MultiFileTestExecutionHTMLReporter.initialSetup(MultiFileTestExecutionHTMLReporter.groovy:173)
at com.protocrawler.pts.core.jtf.analysis.reporting.html.HTMLAnalysisReporter.super$2$initialSetup(HTMLAnalysisReporter.groovy)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:107)
at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:323)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1254)
at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.invokeMethodOnSuperN(ScriptBytecodeAdapter.java:144)
at com.protocrawler.pts.core.jtf.analysis.reporting.html.HTMLAnalysisReporter.initialSetup(HTMLAnalysisReporter.groovy:94)
at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:318)
at com.protocrawler.jtf.reporting.testexecution.html.MultiFileTestExecutionHTMLReporter.generateReport(MultiFileTestExecutionHTMLReporter.groovy:98)
at com.protocrawler.jtf.reporting.testexecution.html.cmdln.HTMTestExecutionReport.performCommand(HTMTestExecutionReport.java:219)
at com.protocrawler.jtf.reporting.testexecution.html.cmdln.HTMTestExecutionReport.performCommand(HTMTestExecutionReport.java:36)
at com.protocrawler.jstdlib.emfcore.cmdline.EMFSettingsCommandLineCommand.performCommand(EMFSettingsCommandLineCommand.java:111)
at com.protocrawler.jstdlib.applications.cmdln.DefaultEclipseRCPCommandLineApplication.start(DefaultEclipseRCPCommandLineApplication.java:126)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:208)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:143)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:109)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:439)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:271)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:668)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:605)
at org.eclipse.equinox.launcher.Main.run(Main.java:1481)
at org.eclipse.equinox.launcher.Main.main(Main.java:1454)
Caused by: org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
General error during canonicalization: Requesting upgrade to write lock.
java.lang.IllegalMonitorStateException: Requesting upgrade to write lock.
at org.eclipse.osgi.container.ModuleDatabase.writeLock(ModuleDatabase.java:840)
at org.eclipse.osgi.container.ModuleContainer.applyDelta(ModuleContainer.java:984)
at org.eclipse.osgi.container.ModuleContainer.resolveDynamic(ModuleContainer.java:835)
at org.eclipse.osgi.internal.loader.BundleLoader.findDynamicSource(BundleLoader.java:1269)
at org.eclipse.osgi.internal.loader.BundleLoader.findResource(BundleLoader.java:729)
at org.eclipse.osgi.internal.loader.ModuleClassLoader.getResource(ModuleClassLoader.java:212)
at java.base/java.lang.ClassLoader.getResource(ClassLoader.java:1413)
at org.codehaus.groovy.control.ClassNodeResolver.findDecompiled(ClassNodeResolver.java:248)
at org.codehaus.groovy.control.ClassNodeResolver.tryAsLoaderClassOrScript(ClassNodeResolver.java:189)
at org.codehaus.groovy.control.ClassNodeResolver.findClassNode(ClassNodeResolver.java:169)
at org.codehaus.groovy.control.ClassNodeResolver.resolveName(ClassNodeResolver.java:125)
at org.codehaus.groovy.ast.decompiled.AsmReferenceResolver.resolveClassNullable(AsmReferenceResolver.java:57)
at org.codehaus.groovy.ast.decompiled.AsmReferenceResolver.resolveClass(AsmReferenceResolver.java:44)
at org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:102)
at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:206)
at groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.java:124)
at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSignature(ClassSignatureParser.java:74)
at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass(ClassSignatureParser.java:32)
at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(DecompiledClassNode.java:163)
at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTypes(DecompiledClassNode.java:128)
at org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:114)
at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:206)
at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:240)
at groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.java:124)
at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSignature(ClassSignatureParser.java:74)
at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass(ClassSignatureParser.java:32)
at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(DecompiledClassNode.java:163)
at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTypes(DecompiledClassNode.java:128)
at org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:114)
at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:206)
at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:240)
at groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.java:124)
at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSignature(ClassSignatureParser.java:74)
at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass(ClassSignatureParser.java:32)
at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(DecompiledClassNode.java:163)
at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTypes(DecompiledClassNode.java:128)
at org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:114)
at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:206)
at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:240)
at groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.java:124)
at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSignature(ClassSignatureParser.java:74)
at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass(ClassSignatureParser.java:32)
at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(DecompiledClassNode.java:163)
at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTypes(DecompiledClassNode.java:128)
at org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:114)
at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:206)
at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:240)
at groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.java:124)
<<removed ~900 lines to make the email shorter>>
at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSignature(ClassSignatureParser.java:74)
at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass(ClassSignatureParser.java:32)
at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(DecompiledClassNode.java:163)
at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTypes(DecompiledClassNode.java:128)
at org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:114)
at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:206)
at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:240)
at groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.java:124)
at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSignature(ClassSignatureParser.java:74)
at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass(ClassSignatureParser.java:32)
at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(DecompiledClassNode.java:163)
at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTypes(DecompiledClassNode.java:128)
at org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:114)
at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:206)
at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:240)
at groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.java:124)
at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSignature(ClassSignatureParser.java:74)
at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass(ClassSignatureParser.java:32)
at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(DecompiledClassNode.java:163)
at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTypes(DecompiledClassNode.java:128)
at org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:114)
at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:206)
at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:240)
at groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.java:124)
1 error
at org.codehaus.groovy.control.ErrorCollector.failIfErrors(ErrorCollector.java:292)
at org.codehaus.groovy.control.ErrorCollector.addException(ErrorCollector.java:140)
at org.codehaus.groovy.control.CompilationUnit$IPrimaryClassNodeOperation.doPhaseOperation(CompilationUnit.java:977)
at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:672)
at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:636)
at groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:392)
at groovy.lang.GroovyClassLoader.lambda$parseClass$3(GroovyClassLoader.java:335)
at org.codehaus.groovy.runtime.memoize.StampedCommonCache.compute(StampedCommonCache.java:163)
at org.codehaus.groovy.runtime.memoize.StampedCommonCache.getAndPut(StampedCommonCache.java:154)
at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:333)
at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:317)
at groovy.text.markup.MarkupTemplateEngine$TemplateGroovyClassLoader.parseClass(MarkupTemplateEngine.java:256)
at groovy.text.markup.MarkupTemplateEngine$MarkupTemplateMaker.<init>(MarkupTemplateEngine.java:229)
at groovy.text.markup.MarkupTemplateEngine.createTemplate(MarkupTemplateEngine.java:174)
at com.protocrawler.jtf.reporting.testexecution.html.TemplateManagementService.loadTemplate(TemplateManagementService.java:142)
at com.protocrawler.jtf.reporting.testexecution.html.TemplateManagementService.getTemplateFromInfo(TemplateManagementService.java:175)
at com.protocrawler.jtf.reporting.testexecution.html.TemplateManagementService.<init>(TemplateManagementService.java:111)
... 28 common frames omitted
Error occurred during execution: Unexpected error loading template PacketTrace
Does anyone have any suggestions of what the cause of these issues may be, or steps we could take to avoid the issues please?
If it's relevant here, the JRE we're currently using is Just J OpenJDK JRE 21.0.5, though we've tried other versions of OpenJDK including 17.x and still see the same issues.
Best Regards,
Rich.
RE: Intermittent Groovy stack overflow exceptions and hangs
Posted by Richard Harker <ri...@cytal.co.uk>.
Hi All.
Apologies, for some reason these mailing list emails aren't all coming through to my email address - so I can't reply directly to the response from Jochen Theodorou, but the workaround suggestion provided there, of setting a compiler configuration that sets 'asmResolving' to false seems to have entirely solved the problems we were having. We're now using a compiler configuration with this flag set to false for both our Groovy Script execution and the templating engine - and so far have not seen any of the stack overflow or hang issues in either instance, both in our groovy 3.0.23 or 4.0.26 setups. (Just to be clear on why we're running both 3.x and 4.x setups - we were intending to just use 4.x but had previously temporarily tried downgrading to 3.x branch in a failed attempt to see if that avoided the issue. Now we have this workaround, we'll now be moving out application fully to latest 4.0.26).
Also, apologies, I'm not too sure what the etiquette is here in terms of whether this should continue to be discussed in the mailing list or via the Jira issue I raised (GROOVY-11580), so I'll add a further response to the issue too.
Also to clarify, our Java library code does include some recursive use of generics, so this could be what is causing the problem. For example, we have a number of classes which implement this interface:
public interface Field<I extends FieldInstance<? extends Field<I>>> extends NamedItemTree<Field<?>, FieldContainer<?>>, AnnotatedItem
Anyway, thanks again to Jochen for the incredibly useful suggestion. I will update the Jira Ticket, and if the issue is acknowledged as a genuine bug, we're very happy to continue assisting in providing more info and/or testing any potential fixes.
Best Regards,
Richard.
-----Original Message-----
From: Paul King <pa...@asert.com.au>
Sent: 10 March 2025 20:18
To: users@groovy.apache.org
Subject: Re: Intermittent Groovy stack overflow exceptions and hangs
Account created.
I understand that creating a reproducible example may be hard. Just give as much description as you can about what the application seems to be doing when those errors occur. I know you have some of that already, but the more the better.
Also, you mentioned Groovy and JDK versions. The OSGi related dependencies (and versions) you use would also be very useful.
Cheers, Paul.
On Tue, Mar 11, 2025 at 3:12 AM Richard Harker <ri...@cytal.co.uk> wrote:
>
> Hi Paul
>
> Ok thank you. I've put in a request for an Apache Groovy Jira account, and will raise a ticket when my account is active.
>
> Unfortunately, due to the nature of the issue and size of our application, I don't see any way we can create a simple isolated sharable example that demonstrates the issue ☹. Though, I've just caught an instance of the stack overflow error exception in the debugger and can see an example class signature that it appears to be struggling with, so perhaps that may be useful. Will add it to the jira ticket. Example class signature from when I saw the exception just now:
>
> <F::Lcom/protocrawler/pts/core/datamodel/fields/Field<+Lcom/protocrawl
> er/pts/core/datamodel/instances/FieldInstance<TF;>;>;>Ljava/lang/Objec
> t;Lcom/protocrawler/jstdlib/core/datastructures/nameditemtree/NamedIte
> mTree<Lcom/protocrawler/pts/core/datamodel/instances/FieldInstance<*>;
> Lcom/protocrawler/pts/core/datamodel/instances/ContainerInstance<*>;>;
> Lcom/protocrawler/pts/core/datamodel/fields/HasFieldDefinition;Lcom/pr
> otocrawler/jstdlib/emfcore/annotations/AnnotatedItem;
>
> Best Regards,
>
> Rich.
>
>
> -----Original Message-----
> From: Paul King <pa...@asert.com.au>
> Sent: 10 March 2025 09:42
> To: users@groovy.apache.org
> Subject: Re: Intermittent Groovy stack overflow exceptions and hangs
>
> Hi Rich,
>
> I suggest you create an issue in our Jira. It is hard to tell from that stacktrace whether it is a Groovy or OSGi issue, but we'd like to understand in either case.
>
> The tricky aspect will be for us to reproduce your issue locally. Do you think creating a simple hello world application to replicate what you have is feasible?
>
> Cheers,
> Paul.
>
> On Mon, Mar 10, 2025 at 6:00 PM Richard Harker <ri...@cytal.co.uk> wrote:
> >
> > Hi All.
> >
> >
> >
> > We develop an OSGI Eclipse E4 based application which is written in a combination of Java and Groovy. The application makes use of Groovy templates dynamically loaded at runtime (to facilitate providing HTML reports) and provides provision for the user to provide Groovy scripts which are parsed and run by a GroovyShell at runtime.
> >
> >
> >
> > For some time now we’ve been seeing issues with intermittent stack overflow exceptions and intermittent hangs - both when the application loads the Groovy templates and when the application compiles the Groovy scripts.
> >
> >
> >
> > The stack overflow exceptions appear to be originating from Groovy and given the hangs appear to occur interchangeably for the stack overflow exceptions, our suspicion is that the hangs are potentially a different manifestation of the same underlying issue.
> >
> >
> >
> > We’ve been using Groovy for some years, and when we were on Groovy 2.5.x did not see these issues at all. We see them on both Groovy 3.x and on 4.x, with them seemingly being more frequent on Groovy 4.x.
> >
> >
> >
> > Has anyone else seen these types of issues? I’ve included two example stack traces below. I’ve truncated each stack trace in the middle of the repeating lines, so the email is not huge.
> >
> >
> >
> >
> >
> >
> >
> > Example stack trace 1 – from when we saw the Stack Overflow Exception with latest Groovy (4.0.26), when the Groovy Shell parses a Groovy script.
> >
> >
> >
> > !ENTRY com.protocrawler.jstdlib.core 4 0 2025-03-04 09:17:15.877
> >
> > !MESSAGE FrameworkEvent ERROR
> >
> > !STACK 0
> >
> > java.lang.StackOverflowError
> >
> > at java.base/java.lang.String.startsWith(String.java:2327)
> >
> > at
> > java.base/sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:
> > 97
> > )
> >
> > at
> > java.base/sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:
> > 77
> > )
> >
> > at java.base/sun.nio.fs.WindowsPath.parse(WindowsPath.java:92)
> >
> > at
> > java.base/sun.nio.fs.WindowsFileSystem.getPath(WindowsFileSystem.java:
> > 231)
> >
> > at
> > java.base/java.util.zip.ZipFile$Source.get(ZipFile.java:1445)
> >
> > at
> > java.base/java.util.zip.ZipFile$CleanableResource.<init>(ZipFile.java:
> > 724)
> >
> > at java.base/java.util.zip.ZipFile.<init>(ZipFile.java:251)
> >
> > at java.base/java.util.zip.ZipFile.<init>(ZipFile.java:180)
> >
> > at java.base/java.util.zip.ZipFile.<init>(ZipFile.java:194)
> >
> > at
> > org.eclipse.osgi.framework.util.SecureAction.getZipFile(SecureAction
> > .j
> > ava:353)
> >
> > at
> > org.eclipse.osgi.storage.bundlefile.ZipBundleFile.doOpen(ZipBundleFi
> > le
> > .java:51)
> >
> > at
> > org.eclipse.osgi.storage.bundlefile.CloseableBundleFile.internalOpen
> > (C
> > loseableBundleFile.java:146)
> >
> > at
> > org.eclipse.osgi.storage.bundlefile.CloseableBundleFile.lockOpen(Clo
> > se
> > ableBundleFile.java:83)
> >
> > at
> > org.eclipse.osgi.storage.bundlefile.CloseableBundleFile.getEntry(Clo
> > se
> > ableBundleFile.java:285)
> >
> > at
> > org.eclipse.osgi.storage.bundlefile.BundleFile.getResourceURL(Bundle
> > Fi
> > le.java:147)
> >
> > at
> > org.eclipse.osgi.internal.loader.classpath.ClasspathEntry.findResour
> > ce
> > (ClasspathEntry.java:228)
> >
> > at
> > org.eclipse.osgi.internal.loader.classpath.ClasspathManager.findLoca
> > lR
> > esourceImpl(ClasspathManager.java:462)
> >
> > at
> > org.eclipse.osgi.internal.loader.classpath.ClasspathManager.findLoca
> > lR
> > esourceImpl(ClasspathManager.java:441)
> >
> > at
> > org.eclipse.osgi.internal.loader.classpath.ClasspathManager.findLoca
> > lR
> > esource(ClasspathManager.java:412)
> >
> > at
> > org.eclipse.osgi.internal.loader.ModuleClassLoader.findLocalResource
> > (M
> > oduleClassLoader.java:340)
> >
> > at
> > org.eclipse.osgi.internal.loader.BundleLoader.findLocalResource(Bund
> > le
> > Loader.java:952)
> >
> > at
> > org.eclipse.osgi.internal.loader.sources.SingleSourcePackage.getReso
> > ur
> > ce(SingleSourcePackage.java:46)
> >
> > at
> > org.eclipse.osgi.internal.loader.BundleLoader.findResource(BundleLoa
> > de
> > r.java:710)
> >
> > at
> > org.eclipse.osgi.internal.loader.ModuleClassLoader.getResource(Modul
> > eC
> > lassLoader.java:212)
> >
> > at
> > java.base/java.lang.ClassLoader.getResource(ClassLoader.java:1413)
> >
> > at
> > org.codehaus.groovy.control.ClassNodeResolver.findDecompiled(ClassNo
> > de
> > Resolver.java:252)
> >
> > at
> > org.codehaus.groovy.control.ClassNodeResolver.tryAsLoaderClassOrScri
> > pt
> > (ClassNodeResolver.java:193)
> >
> > at
> > org.codehaus.groovy.control.ClassNodeResolver.findClassNode(ClassNod
> > eR
> > esolver.java:175)
> >
> > at
> > org.codehaus.groovy.control.ClassNodeResolver.resolveName(ClassNodeR
> > es
> > olver.java:129)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.AsmReferenceResolver.resolveClass
> > Nu
> > llable(AsmReferenceResolver.java:57)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.AsmReferenceResolver.resolveClass
> > (A
> > smReferenceResolver.java:44)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(Type
> > Si
> > gnatureParser.java:113)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureRea
> > de
> > r.java:206)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader
> > .j
> > ava:124)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSi
> > gn
> > ature(ClassSignatureParser.java:111)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureCla
> > ss
> > (ClassSignatureParser.java:35)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSuper
> > s(
> > DecompiledClassNode.java:189)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTy
> > pe
> > s(DecompiledClassNode.java:148)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(Type
> > Si
> > gnatureParser.java:125)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureRea
> > de
> > r.java:206)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureRea
> > de
> > r.java:240)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader
> > .j
> > ava:124)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSi
> > gn
> > ature(ClassSignatureParser.java:111)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureCla
> > ss
> > (ClassSignatureParser.java:35)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSuper
> > s(
> > DecompiledClassNode.java:189)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTy
> > pe
> > s(DecompiledClassNode.java:148)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(Type
> > Si
> > gnatureParser.java:125)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureRea
> > de
> > r.java:206)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureRea
> > de
> > r.java:240)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader
> > .j
> > ava:124)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSi
> > gn
> > ature(ClassSignatureParser.java:111)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureCla
> > ss
> > (ClassSignatureParser.java:35)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSuper
> > s(
> > DecompiledClassNode.java:189)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTy
> > pe
> > s(DecompiledClassNode.java:148)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(Type
> > Si
> > gnatureParser.java:125)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureRea
> > de
> > r.java:206)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureRea
> > de
> > r.java:240)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader
> > .j
> > ava:124)
> >
> >
> >
> > <<removed ~900 lines to make the email shorter>>
> >
> >
> >
> > at
> > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSi
> > gn
> > ature(ClassSignatureParser.java:111)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureCla
> > ss
> > (ClassSignatureParser.java:35)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSuper
> > s(
> > DecompiledClassNode.java:189)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTy
> > pe
> > s(DecompiledClassNode.java:148)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(Type
> > Si
> > gnatureParser.java:125)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureRea
> > de
> > r.java:206)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureRea
> > de
> > r.java:240)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader
> > .j
> > ava:124)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSi
> > gn
> > ature(ClassSignatureParser.java:111)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureCla
> > ss
> > (ClassSignatureParser.java:35)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSuper
> > s(
> > DecompiledClassNode.java:189)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTy
> > pe
> > s(DecompiledClassNode.java:148)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(Type
> > Si
> > gnatureParser.java:125)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureRea
> > de
> > r.java:206)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureRea
> > de
> > r.java:240)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader
> > .j
> > ava:124)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSi
> > gn
> > ature(ClassSignatureParser.java:111)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureCla
> > ss
> > (ClassSignatureParser.java:35)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSuper
> > s(
> > DecompiledClassNode.java:189)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTy
> > pe
> > s(DecompiledClassNode.java:148)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(Type
> > Si
> > gnatureParser.java:125)
> >
> >
> >
> >
> >
> >
> >
> >
> >
> > Example 2 – The stack overflow seen with Groovy 3.0.23 when parsing one of our TPL template files:
> >
> >
> >
> > OpenJDK 64-Bit Server VM warning: Potentially dangerous stack
> > overflow in ReservedStackAccess annotated method
> > java.util.concurrent.locks.ReentrantReadWriteLock$Sync.tryAcquireSha
> > re
> > d(I)I [1]
> >
> > [ERROR] Unhandled HTML reporter exception
> >
> > java.lang.IllegalStateException: Unexpected error loading template
> > PacketTrace
> >
> > at
> > com.protocrawler.jtf.reporting.testexecution.html.TemplateManagement
> > Se
> > rvice.<init>(TemplateManagementService.java:115)
> >
> > at
> > com.protocrawler.jtf.reporting.testexecution.html.TemplateManagement
> > Se
> > rvice.getTemplateManagementService(TemplateManagementService.java:51
> > )
> >
> > at
> > org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.
> > java:318)
> >
> > at
> > com.protocrawler.jtf.reporting.testexecution.html.MultiFileTestExecu
> > ti
> > onHTMLReporter.initialSetup(MultiFileTestExecutionHTMLReporter.groovy:
> > 173)
> >
> > at
> > com.protocrawler.pts.core.jtf.analysis.reporting.html.HTMLAnalysisRe
> > po
> > rter.super$2$initialSetup(HTMLAnalysisReporter.groovy)
> >
> > at
> > java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(Dir
> > ec
> > tMethodHandleAccessor.java:103)
> >
> > at java.base/java.lang.reflect.Method.invoke(Method.java:580)
> >
> > at
> > org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java
> > :1
> > 07)
> >
> > at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:323)
> >
> > at
> > groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1254)
> >
> > at
> > org.codehaus.groovy.runtime.ScriptBytecodeAdapter.invokeMethodOnSupe
> > rN
> > (ScriptBytecodeAdapter.java:144)
> >
> > at
> > com.protocrawler.pts.core.jtf.analysis.reporting.html.HTMLAnalysisRe
> > po
> > rter.initialSetup(HTMLAnalysisReporter.groovy:94)
> >
> > at
> > org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.
> > java:318)
> >
> > at
> > com.protocrawler.jtf.reporting.testexecution.html.MultiFileTestExecu
> > ti
> > onHTMLReporter.generateReport(MultiFileTestExecutionHTMLReporter.gro
> > ov
> > y:98)
> >
> > at
> > com.protocrawler.jtf.reporting.testexecution.html.cmdln.HTMTestExecu
> > ti
> > onReport.performCommand(HTMTestExecutionReport.java:219)
> >
> > at
> > com.protocrawler.jtf.reporting.testexecution.html.cmdln.HTMTestExecu
> > ti
> > onReport.performCommand(HTMTestExecutionReport.java:36)
> >
> > at
> > com.protocrawler.jstdlib.emfcore.cmdline.EMFSettingsCommandLineComma
> > nd
> > .performCommand(EMFSettingsCommandLineCommand.java:111)
> >
> > at
> > com.protocrawler.jstdlib.applications.cmdln.DefaultEclipseRCPCommand
> > Li
> > neApplication.start(DefaultEclipseRCPCommandLineApplication.java:126
> > )
> >
> > at
> > org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHand
> > le
> > .java:208)
> >
> > at
> > org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runAppl
> > ic
> > ation(EclipseAppLauncher.java:143)
> >
> > at
> > org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(E
> > cl
> > ipseAppLauncher.java:109)
> >
> > at
> > org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.j
> > av
> > a:439)
> >
> > at
> > org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.j
> > av
> > a:271)
> >
> > at
> > java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(Dir
> > ec
> > tMethodHandleAccessor.java:103)
> >
> > at java.base/java.lang.reflect.Method.invoke(Method.java:580)
> >
> > at
> > org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:668)
> >
> > at org.eclipse.equinox.launcher.Main.basicRun(Main.java:605)
> >
> > at org.eclipse.equinox.launcher.Main.run(Main.java:1481)
> >
> > at org.eclipse.equinox.launcher.Main.main(Main.java:1454)
> >
> > Caused by: org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
> >
> > General error during canonicalization: Requesting upgrade to write lock.
> >
> >
> >
> > java.lang.IllegalMonitorStateException: Requesting upgrade to write lock.
> >
> > at
> > org.eclipse.osgi.container.ModuleDatabase.writeLock(ModuleDatabase.j
> > av
> > a:840)
> >
> > at
> > org.eclipse.osgi.container.ModuleContainer.applyDelta(ModuleContainer.
> > java:984)
> >
> > at
> > org.eclipse.osgi.container.ModuleContainer.resolveDynamic(ModuleCont
> > ai
> > ner.java:835)
> >
> > at
> > org.eclipse.osgi.internal.loader.BundleLoader.findDynamicSource(Bund
> > le
> > Loader.java:1269)
> >
> > at
> > org.eclipse.osgi.internal.loader.BundleLoader.findResource(BundleLoa
> > de
> > r.java:729)
> >
> > at
> > org.eclipse.osgi.internal.loader.ModuleClassLoader.getResource(Modul
> > eC
> > lassLoader.java:212)
> >
> > at
> > java.base/java.lang.ClassLoader.getResource(ClassLoader.java:1413)
> >
> > at
> > org.codehaus.groovy.control.ClassNodeResolver.findDecompiled(ClassNo
> > de
> > Resolver.java:248)
> >
> > at
> > org.codehaus.groovy.control.ClassNodeResolver.tryAsLoaderClassOrScri
> > pt
> > (ClassNodeResolver.java:189)
> >
> > at
> > org.codehaus.groovy.control.ClassNodeResolver.findClassNode(ClassNod
> > eR
> > esolver.java:169)
> >
> > at
> > org.codehaus.groovy.control.ClassNodeResolver.resolveName(ClassNodeR
> > es
> > olver.java:125)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.AsmReferenceResolver.resolveClass
> > Nu
> > llable(AsmReferenceResolver.java:57)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.AsmReferenceResolver.resolveClass
> > (A
> > smReferenceResolver.java:44)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(Type
> > Si
> > gnatureParser.java:102)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureRea
> > de
> > r.java:206)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader
> > .j
> > ava:124)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSi
> > gn
> > ature(ClassSignatureParser.java:74)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureCla
> > ss
> > (ClassSignatureParser.java:32)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSuper
> > s(
> > DecompiledClassNode.java:163)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTy
> > pe
> > s(DecompiledClassNode.java:128)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(Type
> > Si
> > gnatureParser.java:114)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureRea
> > de
> > r.java:206)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureRea
> > de
> > r.java:240)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader
> > .j
> > ava:124)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSi
> > gn
> > ature(ClassSignatureParser.java:74)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureCla
> > ss
> > (ClassSignatureParser.java:32)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSuper
> > s(
> > DecompiledClassNode.java:163)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTy
> > pe
> > s(DecompiledClassNode.java:128)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(Type
> > Si
> > gnatureParser.java:114)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureRea
> > de
> > r.java:206)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureRea
> > de
> > r.java:240)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader
> > .j
> > ava:124)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSi
> > gn
> > ature(ClassSignatureParser.java:74)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureCla
> > ss
> > (ClassSignatureParser.java:32)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSuper
> > s(
> > DecompiledClassNode.java:163)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTy
> > pe
> > s(DecompiledClassNode.java:128)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(Type
> > Si
> > gnatureParser.java:114)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureRea
> > de
> > r.java:206)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureRea
> > de
> > r.java:240)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader
> > .j
> > ava:124)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSi
> > gn
> > ature(ClassSignatureParser.java:74)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureCla
> > ss
> > (ClassSignatureParser.java:32)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSuper
> > s(
> > DecompiledClassNode.java:163)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTy
> > pe
> > s(DecompiledClassNode.java:128)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(Type
> > Si
> > gnatureParser.java:114)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureRea
> > de
> > r.java:206)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureRea
> > de
> > r.java:240)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader
> > .j
> > ava:124)
> >
> >
> >
> > <<removed ~900 lines to make the email shorter>>
> >
> >
> >
> > at
> > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSi
> > gn
> > ature(ClassSignatureParser.java:74)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureCla
> > ss
> > (ClassSignatureParser.java:32)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSuper
> > s(
> > DecompiledClassNode.java:163)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTy
> > pe
> > s(DecompiledClassNode.java:128)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(Type
> > Si
> > gnatureParser.java:114)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureRea
> > de
> > r.java:206)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureRea
> > de
> > r.java:240)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader
> > .j
> > ava:124)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSi
> > gn
> > ature(ClassSignatureParser.java:74)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureCla
> > ss
> > (ClassSignatureParser.java:32)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSuper
> > s(
> > DecompiledClassNode.java:163)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTy
> > pe
> > s(DecompiledClassNode.java:128)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(Type
> > Si
> > gnatureParser.java:114)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureRea
> > de
> > r.java:206)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureRea
> > de
> > r.java:240)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader
> > .j
> > ava:124)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSi
> > gn
> > ature(ClassSignatureParser.java:74)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureCla
> > ss
> > (ClassSignatureParser.java:32)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSuper
> > s(
> > DecompiledClassNode.java:163)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTy
> > pe
> > s(DecompiledClassNode.java:128)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(Type
> > Si
> > gnatureParser.java:114)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureRea
> > de
> > r.java:206)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureRea
> > de
> > r.java:240)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader
> > .j
> > ava:124)
> >
> >
> >
> > 1 error
> >
> >
> >
> > at
> > org.codehaus.groovy.control.ErrorCollector.failIfErrors(ErrorCollect
> > or
> > .java:292)
> >
> > at
> > org.codehaus.groovy.control.ErrorCollector.addException(ErrorCollect
> > or
> > .java:140)
> >
> > at
> > org.codehaus.groovy.control.CompilationUnit$IPrimaryClassNodeOperati
> > on
> > .doPhaseOperation(CompilationUnit.java:977)
> >
> > at
> > org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(C
> > om
> > pilationUnit.java:672)
> >
> > at
> > org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.
> > ja
> > va:636)
> >
> > at
> > groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:39
> > 2)
> >
> > at
> > groovy.lang.GroovyClassLoader.lambda$parseClass$3(GroovyClassLoader.
> > ja
> > va:335)
> >
> > at
> > org.codehaus.groovy.runtime.memoize.StampedCommonCache.compute(Stamp
> > ed
> > CommonCache.java:163)
> >
> > at
> > org.codehaus.groovy.runtime.memoize.StampedCommonCache.getAndPut(Sta
> > mp
> > edCommonCache.java:154)
> >
> > at
> > groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:333)
> >
> > at
> > groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:317)
> >
> > at
> > groovy.text.markup.MarkupTemplateEngine$TemplateGroovyClassLoader.pa
> > rs
> > eClass(MarkupTemplateEngine.java:256)
> >
> > at
> > groovy.text.markup.MarkupTemplateEngine$MarkupTemplateMaker.<init>(M
> > ar
> > kupTemplateEngine.java:229)
> >
> > at
> > groovy.text.markup.MarkupTemplateEngine.createTemplate(MarkupTemplat
> > eE
> > ngine.java:174)
> >
> > at
> > com.protocrawler.jtf.reporting.testexecution.html.TemplateManagement
> > Se
> > rvice.loadTemplate(TemplateManagementService.java:142)
> >
> > at
> > com.protocrawler.jtf.reporting.testexecution.html.TemplateManagement
> > Se
> > rvice.getTemplateFromInfo(TemplateManagementService.java:175)
> >
> > at
> > com.protocrawler.jtf.reporting.testexecution.html.TemplateManagement
> > Se
> > rvice.<init>(TemplateManagementService.java:111)
> >
> > ... 28 common frames omitted
> >
> > Error occurred during execution: Unexpected error loading template
> > PacketTrace
> >
> >
> >
> > Does anyone have any suggestions of what the cause of these issues may be, or steps we could take to avoid the issues please?
> >
> >
> >
> >
> >
> > If it’s relevant here, the JRE we’re currently using is Just J OpenJDK JRE 21.0.5, though we’ve tried other versions of OpenJDK including 17.x and still see the same issues.
> >
> >
> >
> > Best Regards,
> >
> >
> >
> > Rich.
> >
> >
Re: Intermittent Groovy stack overflow exceptions and hangs
Posted by Paul King <pa...@asert.com.au>.
Account created.
I understand that creating a reproducible example may be hard. Just
give as much description as you can about what the application seems
to be doing when those errors occur. I know you have some of that
already, but the more the better.
Also, you mentioned Groovy and JDK versions. The OSGi related
dependencies (and versions) you use would also be very useful.
Cheers, Paul.
On Tue, Mar 11, 2025 at 3:12 AM Richard Harker
<ri...@cytal.co.uk> wrote:
>
> Hi Paul
>
> Ok thank you. I've put in a request for an Apache Groovy Jira account, and will raise a ticket when my account is active.
>
> Unfortunately, due to the nature of the issue and size of our application, I don't see any way we can create a simple isolated sharable example that demonstrates the issue ☹. Though, I've just caught an instance of the stack overflow error exception in the debugger and can see an example class signature that it appears to be struggling with, so perhaps that may be useful. Will add it to the jira ticket. Example class signature from when I saw the exception just now:
>
> <F::Lcom/protocrawler/pts/core/datamodel/fields/Field<+Lcom/protocrawler/pts/core/datamodel/instances/FieldInstance<TF;>;>;>Ljava/lang/Object;Lcom/protocrawler/jstdlib/core/datastructures/nameditemtree/NamedItemTree<Lcom/protocrawler/pts/core/datamodel/instances/FieldInstance<*>;Lcom/protocrawler/pts/core/datamodel/instances/ContainerInstance<*>;>;Lcom/protocrawler/pts/core/datamodel/fields/HasFieldDefinition;Lcom/protocrawler/jstdlib/emfcore/annotations/AnnotatedItem;
>
> Best Regards,
>
> Rich.
>
>
> -----Original Message-----
> From: Paul King <pa...@asert.com.au>
> Sent: 10 March 2025 09:42
> To: users@groovy.apache.org
> Subject: Re: Intermittent Groovy stack overflow exceptions and hangs
>
> Hi Rich,
>
> I suggest you create an issue in our Jira. It is hard to tell from that stacktrace whether it is a Groovy or OSGi issue, but we'd like to understand in either case.
>
> The tricky aspect will be for us to reproduce your issue locally. Do you think creating a simple hello world application to replicate what you have is feasible?
>
> Cheers,
> Paul.
>
> On Mon, Mar 10, 2025 at 6:00 PM Richard Harker <ri...@cytal.co.uk> wrote:
> >
> > Hi All.
> >
> >
> >
> > We develop an OSGI Eclipse E4 based application which is written in a combination of Java and Groovy. The application makes use of Groovy templates dynamically loaded at runtime (to facilitate providing HTML reports) and provides provision for the user to provide Groovy scripts which are parsed and run by a GroovyShell at runtime.
> >
> >
> >
> > For some time now we’ve been seeing issues with intermittent stack overflow exceptions and intermittent hangs - both when the application loads the Groovy templates and when the application compiles the Groovy scripts.
> >
> >
> >
> > The stack overflow exceptions appear to be originating from Groovy and given the hangs appear to occur interchangeably for the stack overflow exceptions, our suspicion is that the hangs are potentially a different manifestation of the same underlying issue.
> >
> >
> >
> > We’ve been using Groovy for some years, and when we were on Groovy 2.5.x did not see these issues at all. We see them on both Groovy 3.x and on 4.x, with them seemingly being more frequent on Groovy 4.x.
> >
> >
> >
> > Has anyone else seen these types of issues? I’ve included two example stack traces below. I’ve truncated each stack trace in the middle of the repeating lines, so the email is not huge.
> >
> >
> >
> >
> >
> >
> >
> > Example stack trace 1 – from when we saw the Stack Overflow Exception with latest Groovy (4.0.26), when the Groovy Shell parses a Groovy script.
> >
> >
> >
> > !ENTRY com.protocrawler.jstdlib.core 4 0 2025-03-04 09:17:15.877
> >
> > !MESSAGE FrameworkEvent ERROR
> >
> > !STACK 0
> >
> > java.lang.StackOverflowError
> >
> > at java.base/java.lang.String.startsWith(String.java:2327)
> >
> > at
> > java.base/sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:97
> > )
> >
> > at
> > java.base/sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:77
> > )
> >
> > at java.base/sun.nio.fs.WindowsPath.parse(WindowsPath.java:92)
> >
> > at
> > java.base/sun.nio.fs.WindowsFileSystem.getPath(WindowsFileSystem.java:
> > 231)
> >
> > at java.base/java.util.zip.ZipFile$Source.get(ZipFile.java:1445)
> >
> > at
> > java.base/java.util.zip.ZipFile$CleanableResource.<init>(ZipFile.java:
> > 724)
> >
> > at java.base/java.util.zip.ZipFile.<init>(ZipFile.java:251)
> >
> > at java.base/java.util.zip.ZipFile.<init>(ZipFile.java:180)
> >
> > at java.base/java.util.zip.ZipFile.<init>(ZipFile.java:194)
> >
> > at
> > org.eclipse.osgi.framework.util.SecureAction.getZipFile(SecureAction.j
> > ava:353)
> >
> > at
> > org.eclipse.osgi.storage.bundlefile.ZipBundleFile.doOpen(ZipBundleFile
> > .java:51)
> >
> > at
> > org.eclipse.osgi.storage.bundlefile.CloseableBundleFile.internalOpen(C
> > loseableBundleFile.java:146)
> >
> > at
> > org.eclipse.osgi.storage.bundlefile.CloseableBundleFile.lockOpen(Close
> > ableBundleFile.java:83)
> >
> > at
> > org.eclipse.osgi.storage.bundlefile.CloseableBundleFile.getEntry(Close
> > ableBundleFile.java:285)
> >
> > at
> > org.eclipse.osgi.storage.bundlefile.BundleFile.getResourceURL(BundleFi
> > le.java:147)
> >
> > at
> > org.eclipse.osgi.internal.loader.classpath.ClasspathEntry.findResource
> > (ClasspathEntry.java:228)
> >
> > at
> > org.eclipse.osgi.internal.loader.classpath.ClasspathManager.findLocalR
> > esourceImpl(ClasspathManager.java:462)
> >
> > at
> > org.eclipse.osgi.internal.loader.classpath.ClasspathManager.findLocalR
> > esourceImpl(ClasspathManager.java:441)
> >
> > at
> > org.eclipse.osgi.internal.loader.classpath.ClasspathManager.findLocalR
> > esource(ClasspathManager.java:412)
> >
> > at
> > org.eclipse.osgi.internal.loader.ModuleClassLoader.findLocalResource(M
> > oduleClassLoader.java:340)
> >
> > at
> > org.eclipse.osgi.internal.loader.BundleLoader.findLocalResource(Bundle
> > Loader.java:952)
> >
> > at
> > org.eclipse.osgi.internal.loader.sources.SingleSourcePackage.getResour
> > ce(SingleSourcePackage.java:46)
> >
> > at
> > org.eclipse.osgi.internal.loader.BundleLoader.findResource(BundleLoade
> > r.java:710)
> >
> > at
> > org.eclipse.osgi.internal.loader.ModuleClassLoader.getResource(ModuleC
> > lassLoader.java:212)
> >
> > at
> > java.base/java.lang.ClassLoader.getResource(ClassLoader.java:1413)
> >
> > at
> > org.codehaus.groovy.control.ClassNodeResolver.findDecompiled(ClassNode
> > Resolver.java:252)
> >
> > at
> > org.codehaus.groovy.control.ClassNodeResolver.tryAsLoaderClassOrScript
> > (ClassNodeResolver.java:193)
> >
> > at
> > org.codehaus.groovy.control.ClassNodeResolver.findClassNode(ClassNodeR
> > esolver.java:175)
> >
> > at
> > org.codehaus.groovy.control.ClassNodeResolver.resolveName(ClassNodeRes
> > olver.java:129)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.AsmReferenceResolver.resolveClassNu
> > llable(AsmReferenceResolver.java:57)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.AsmReferenceResolver.resolveClass(A
> > smReferenceResolver.java:44)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSi
> > gnatureParser.java:113)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReade
> > r.java:206)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.j
> > ava:124)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSign
> > ature(ClassSignatureParser.java:111)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass
> > (ClassSignatureParser.java:35)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(
> > DecompiledClassNode.java:189)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsType
> > s(DecompiledClassNode.java:148)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSi
> > gnatureParser.java:125)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReade
> > r.java:206)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReade
> > r.java:240)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.j
> > ava:124)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSign
> > ature(ClassSignatureParser.java:111)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass
> > (ClassSignatureParser.java:35)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(
> > DecompiledClassNode.java:189)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsType
> > s(DecompiledClassNode.java:148)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSi
> > gnatureParser.java:125)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReade
> > r.java:206)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReade
> > r.java:240)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.j
> > ava:124)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSign
> > ature(ClassSignatureParser.java:111)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass
> > (ClassSignatureParser.java:35)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(
> > DecompiledClassNode.java:189)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsType
> > s(DecompiledClassNode.java:148)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSi
> > gnatureParser.java:125)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReade
> > r.java:206)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReade
> > r.java:240)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.j
> > ava:124)
> >
> >
> >
> > <<removed ~900 lines to make the email shorter>>
> >
> >
> >
> > at
> > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSign
> > ature(ClassSignatureParser.java:111)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass
> > (ClassSignatureParser.java:35)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(
> > DecompiledClassNode.java:189)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsType
> > s(DecompiledClassNode.java:148)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSi
> > gnatureParser.java:125)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReade
> > r.java:206)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReade
> > r.java:240)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.j
> > ava:124)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSign
> > ature(ClassSignatureParser.java:111)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass
> > (ClassSignatureParser.java:35)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(
> > DecompiledClassNode.java:189)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsType
> > s(DecompiledClassNode.java:148)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSi
> > gnatureParser.java:125)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReade
> > r.java:206)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReade
> > r.java:240)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.j
> > ava:124)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSign
> > ature(ClassSignatureParser.java:111)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass
> > (ClassSignatureParser.java:35)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(
> > DecompiledClassNode.java:189)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsType
> > s(DecompiledClassNode.java:148)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSi
> > gnatureParser.java:125)
> >
> >
> >
> >
> >
> >
> >
> >
> >
> > Example 2 – The stack overflow seen with Groovy 3.0.23 when parsing one of our TPL template files:
> >
> >
> >
> > OpenJDK 64-Bit Server VM warning: Potentially dangerous stack overflow
> > in ReservedStackAccess annotated method
> > java.util.concurrent.locks.ReentrantReadWriteLock$Sync.tryAcquireShare
> > d(I)I [1]
> >
> > [ERROR] Unhandled HTML reporter exception
> >
> > java.lang.IllegalStateException: Unexpected error loading template
> > PacketTrace
> >
> > at
> > com.protocrawler.jtf.reporting.testexecution.html.TemplateManagementSe
> > rvice.<init>(TemplateManagementService.java:115)
> >
> > at
> > com.protocrawler.jtf.reporting.testexecution.html.TemplateManagementSe
> > rvice.getTemplateManagementService(TemplateManagementService.java:51)
> >
> > at
> > org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.
> > java:318)
> >
> > at
> > com.protocrawler.jtf.reporting.testexecution.html.MultiFileTestExecuti
> > onHTMLReporter.initialSetup(MultiFileTestExecutionHTMLReporter.groovy:
> > 173)
> >
> > at
> > com.protocrawler.pts.core.jtf.analysis.reporting.html.HTMLAnalysisRepo
> > rter.super$2$initialSetup(HTMLAnalysisReporter.groovy)
> >
> > at
> > java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(Direc
> > tMethodHandleAccessor.java:103)
> >
> > at java.base/java.lang.reflect.Method.invoke(Method.java:580)
> >
> > at
> > org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:1
> > 07)
> >
> > at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:323)
> >
> > at
> > groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1254)
> >
> > at
> > org.codehaus.groovy.runtime.ScriptBytecodeAdapter.invokeMethodOnSuperN
> > (ScriptBytecodeAdapter.java:144)
> >
> > at
> > com.protocrawler.pts.core.jtf.analysis.reporting.html.HTMLAnalysisRepo
> > rter.initialSetup(HTMLAnalysisReporter.groovy:94)
> >
> > at
> > org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.
> > java:318)
> >
> > at
> > com.protocrawler.jtf.reporting.testexecution.html.MultiFileTestExecuti
> > onHTMLReporter.generateReport(MultiFileTestExecutionHTMLReporter.groov
> > y:98)
> >
> > at
> > com.protocrawler.jtf.reporting.testexecution.html.cmdln.HTMTestExecuti
> > onReport.performCommand(HTMTestExecutionReport.java:219)
> >
> > at
> > com.protocrawler.jtf.reporting.testexecution.html.cmdln.HTMTestExecuti
> > onReport.performCommand(HTMTestExecutionReport.java:36)
> >
> > at
> > com.protocrawler.jstdlib.emfcore.cmdline.EMFSettingsCommandLineCommand
> > .performCommand(EMFSettingsCommandLineCommand.java:111)
> >
> > at
> > com.protocrawler.jstdlib.applications.cmdln.DefaultEclipseRCPCommandLi
> > neApplication.start(DefaultEclipseRCPCommandLineApplication.java:126)
> >
> > at
> > org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle
> > .java:208)
> >
> > at
> > org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplic
> > ation(EclipseAppLauncher.java:143)
> >
> > at
> > org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(Ecl
> > ipseAppLauncher.java:109)
> >
> > at
> > org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.jav
> > a:439)
> >
> > at
> > org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.jav
> > a:271)
> >
> > at
> > java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(Direc
> > tMethodHandleAccessor.java:103)
> >
> > at java.base/java.lang.reflect.Method.invoke(Method.java:580)
> >
> > at
> > org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:668)
> >
> > at org.eclipse.equinox.launcher.Main.basicRun(Main.java:605)
> >
> > at org.eclipse.equinox.launcher.Main.run(Main.java:1481)
> >
> > at org.eclipse.equinox.launcher.Main.main(Main.java:1454)
> >
> > Caused by: org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
> >
> > General error during canonicalization: Requesting upgrade to write lock.
> >
> >
> >
> > java.lang.IllegalMonitorStateException: Requesting upgrade to write lock.
> >
> > at
> > org.eclipse.osgi.container.ModuleDatabase.writeLock(ModuleDatabase.jav
> > a:840)
> >
> > at
> > org.eclipse.osgi.container.ModuleContainer.applyDelta(ModuleContainer.
> > java:984)
> >
> > at
> > org.eclipse.osgi.container.ModuleContainer.resolveDynamic(ModuleContai
> > ner.java:835)
> >
> > at
> > org.eclipse.osgi.internal.loader.BundleLoader.findDynamicSource(Bundle
> > Loader.java:1269)
> >
> > at
> > org.eclipse.osgi.internal.loader.BundleLoader.findResource(BundleLoade
> > r.java:729)
> >
> > at
> > org.eclipse.osgi.internal.loader.ModuleClassLoader.getResource(ModuleC
> > lassLoader.java:212)
> >
> > at
> > java.base/java.lang.ClassLoader.getResource(ClassLoader.java:1413)
> >
> > at
> > org.codehaus.groovy.control.ClassNodeResolver.findDecompiled(ClassNode
> > Resolver.java:248)
> >
> > at
> > org.codehaus.groovy.control.ClassNodeResolver.tryAsLoaderClassOrScript
> > (ClassNodeResolver.java:189)
> >
> > at
> > org.codehaus.groovy.control.ClassNodeResolver.findClassNode(ClassNodeR
> > esolver.java:169)
> >
> > at
> > org.codehaus.groovy.control.ClassNodeResolver.resolveName(ClassNodeRes
> > olver.java:125)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.AsmReferenceResolver.resolveClassNu
> > llable(AsmReferenceResolver.java:57)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.AsmReferenceResolver.resolveClass(A
> > smReferenceResolver.java:44)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSi
> > gnatureParser.java:102)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReade
> > r.java:206)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.j
> > ava:124)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSign
> > ature(ClassSignatureParser.java:74)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass
> > (ClassSignatureParser.java:32)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(
> > DecompiledClassNode.java:163)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsType
> > s(DecompiledClassNode.java:128)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSi
> > gnatureParser.java:114)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReade
> > r.java:206)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReade
> > r.java:240)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.j
> > ava:124)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSign
> > ature(ClassSignatureParser.java:74)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass
> > (ClassSignatureParser.java:32)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(
> > DecompiledClassNode.java:163)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsType
> > s(DecompiledClassNode.java:128)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSi
> > gnatureParser.java:114)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReade
> > r.java:206)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReade
> > r.java:240)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.j
> > ava:124)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSign
> > ature(ClassSignatureParser.java:74)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass
> > (ClassSignatureParser.java:32)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(
> > DecompiledClassNode.java:163)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsType
> > s(DecompiledClassNode.java:128)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSi
> > gnatureParser.java:114)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReade
> > r.java:206)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReade
> > r.java:240)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.j
> > ava:124)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSign
> > ature(ClassSignatureParser.java:74)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass
> > (ClassSignatureParser.java:32)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(
> > DecompiledClassNode.java:163)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsType
> > s(DecompiledClassNode.java:128)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSi
> > gnatureParser.java:114)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReade
> > r.java:206)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReade
> > r.java:240)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.j
> > ava:124)
> >
> >
> >
> > <<removed ~900 lines to make the email shorter>>
> >
> >
> >
> > at
> > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSign
> > ature(ClassSignatureParser.java:74)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass
> > (ClassSignatureParser.java:32)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(
> > DecompiledClassNode.java:163)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsType
> > s(DecompiledClassNode.java:128)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSi
> > gnatureParser.java:114)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReade
> > r.java:206)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReade
> > r.java:240)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.j
> > ava:124)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSign
> > ature(ClassSignatureParser.java:74)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass
> > (ClassSignatureParser.java:32)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(
> > DecompiledClassNode.java:163)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsType
> > s(DecompiledClassNode.java:128)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSi
> > gnatureParser.java:114)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReade
> > r.java:206)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReade
> > r.java:240)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.j
> > ava:124)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSign
> > ature(ClassSignatureParser.java:74)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass
> > (ClassSignatureParser.java:32)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(
> > DecompiledClassNode.java:163)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsType
> > s(DecompiledClassNode.java:128)
> >
> > at
> > org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSi
> > gnatureParser.java:114)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReade
> > r.java:206)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReade
> > r.java:240)
> >
> > at
> > groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.j
> > ava:124)
> >
> >
> >
> > 1 error
> >
> >
> >
> > at
> > org.codehaus.groovy.control.ErrorCollector.failIfErrors(ErrorCollector
> > .java:292)
> >
> > at
> > org.codehaus.groovy.control.ErrorCollector.addException(ErrorCollector
> > .java:140)
> >
> > at
> > org.codehaus.groovy.control.CompilationUnit$IPrimaryClassNodeOperation
> > .doPhaseOperation(CompilationUnit.java:977)
> >
> > at
> > org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(Com
> > pilationUnit.java:672)
> >
> > at
> > org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.ja
> > va:636)
> >
> > at
> > groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:392)
> >
> > at
> > groovy.lang.GroovyClassLoader.lambda$parseClass$3(GroovyClassLoader.ja
> > va:335)
> >
> > at
> > org.codehaus.groovy.runtime.memoize.StampedCommonCache.compute(Stamped
> > CommonCache.java:163)
> >
> > at
> > org.codehaus.groovy.runtime.memoize.StampedCommonCache.getAndPut(Stamp
> > edCommonCache.java:154)
> >
> > at
> > groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:333)
> >
> > at
> > groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:317)
> >
> > at
> > groovy.text.markup.MarkupTemplateEngine$TemplateGroovyClassLoader.pars
> > eClass(MarkupTemplateEngine.java:256)
> >
> > at
> > groovy.text.markup.MarkupTemplateEngine$MarkupTemplateMaker.<init>(Mar
> > kupTemplateEngine.java:229)
> >
> > at
> > groovy.text.markup.MarkupTemplateEngine.createTemplate(MarkupTemplateE
> > ngine.java:174)
> >
> > at
> > com.protocrawler.jtf.reporting.testexecution.html.TemplateManagementSe
> > rvice.loadTemplate(TemplateManagementService.java:142)
> >
> > at
> > com.protocrawler.jtf.reporting.testexecution.html.TemplateManagementSe
> > rvice.getTemplateFromInfo(TemplateManagementService.java:175)
> >
> > at
> > com.protocrawler.jtf.reporting.testexecution.html.TemplateManagementSe
> > rvice.<init>(TemplateManagementService.java:111)
> >
> > ... 28 common frames omitted
> >
> > Error occurred during execution: Unexpected error loading template
> > PacketTrace
> >
> >
> >
> > Does anyone have any suggestions of what the cause of these issues may be, or steps we could take to avoid the issues please?
> >
> >
> >
> >
> >
> > If it’s relevant here, the JRE we’re currently using is Just J OpenJDK JRE 21.0.5, though we’ve tried other versions of OpenJDK including 17.x and still see the same issues.
> >
> >
> >
> > Best Regards,
> >
> >
> >
> > Rich.
> >
> >
RE: Intermittent Groovy stack overflow exceptions and hangs
Posted by Richard Harker <ri...@cytal.co.uk>.
Hi Paul
Ok thank you. I've put in a request for an Apache Groovy Jira account, and will raise a ticket when my account is active.
Unfortunately, due to the nature of the issue and size of our application, I don't see any way we can create a simple isolated sharable example that demonstrates the issue ☹. Though, I've just caught an instance of the stack overflow error exception in the debugger and can see an example class signature that it appears to be struggling with, so perhaps that may be useful. Will add it to the jira ticket. Example class signature from when I saw the exception just now:
<F::Lcom/protocrawler/pts/core/datamodel/fields/Field<+Lcom/protocrawler/pts/core/datamodel/instances/FieldInstance<TF;>;>;>Ljava/lang/Object;Lcom/protocrawler/jstdlib/core/datastructures/nameditemtree/NamedItemTree<Lcom/protocrawler/pts/core/datamodel/instances/FieldInstance<*>;Lcom/protocrawler/pts/core/datamodel/instances/ContainerInstance<*>;>;Lcom/protocrawler/pts/core/datamodel/fields/HasFieldDefinition;Lcom/protocrawler/jstdlib/emfcore/annotations/AnnotatedItem;
Best Regards,
Rich.
-----Original Message-----
From: Paul King <pa...@asert.com.au>
Sent: 10 March 2025 09:42
To: users@groovy.apache.org
Subject: Re: Intermittent Groovy stack overflow exceptions and hangs
Hi Rich,
I suggest you create an issue in our Jira. It is hard to tell from that stacktrace whether it is a Groovy or OSGi issue, but we'd like to understand in either case.
The tricky aspect will be for us to reproduce your issue locally. Do you think creating a simple hello world application to replicate what you have is feasible?
Cheers,
Paul.
On Mon, Mar 10, 2025 at 6:00 PM Richard Harker <ri...@cytal.co.uk> wrote:
>
> Hi All.
>
>
>
> We develop an OSGI Eclipse E4 based application which is written in a combination of Java and Groovy. The application makes use of Groovy templates dynamically loaded at runtime (to facilitate providing HTML reports) and provides provision for the user to provide Groovy scripts which are parsed and run by a GroovyShell at runtime.
>
>
>
> For some time now we’ve been seeing issues with intermittent stack overflow exceptions and intermittent hangs - both when the application loads the Groovy templates and when the application compiles the Groovy scripts.
>
>
>
> The stack overflow exceptions appear to be originating from Groovy and given the hangs appear to occur interchangeably for the stack overflow exceptions, our suspicion is that the hangs are potentially a different manifestation of the same underlying issue.
>
>
>
> We’ve been using Groovy for some years, and when we were on Groovy 2.5.x did not see these issues at all. We see them on both Groovy 3.x and on 4.x, with them seemingly being more frequent on Groovy 4.x.
>
>
>
> Has anyone else seen these types of issues? I’ve included two example stack traces below. I’ve truncated each stack trace in the middle of the repeating lines, so the email is not huge.
>
>
>
>
>
>
>
> Example stack trace 1 – from when we saw the Stack Overflow Exception with latest Groovy (4.0.26), when the Groovy Shell parses a Groovy script.
>
>
>
> !ENTRY com.protocrawler.jstdlib.core 4 0 2025-03-04 09:17:15.877
>
> !MESSAGE FrameworkEvent ERROR
>
> !STACK 0
>
> java.lang.StackOverflowError
>
> at java.base/java.lang.String.startsWith(String.java:2327)
>
> at
> java.base/sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:97
> )
>
> at
> java.base/sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:77
> )
>
> at java.base/sun.nio.fs.WindowsPath.parse(WindowsPath.java:92)
>
> at
> java.base/sun.nio.fs.WindowsFileSystem.getPath(WindowsFileSystem.java:
> 231)
>
> at java.base/java.util.zip.ZipFile$Source.get(ZipFile.java:1445)
>
> at
> java.base/java.util.zip.ZipFile$CleanableResource.<init>(ZipFile.java:
> 724)
>
> at java.base/java.util.zip.ZipFile.<init>(ZipFile.java:251)
>
> at java.base/java.util.zip.ZipFile.<init>(ZipFile.java:180)
>
> at java.base/java.util.zip.ZipFile.<init>(ZipFile.java:194)
>
> at
> org.eclipse.osgi.framework.util.SecureAction.getZipFile(SecureAction.j
> ava:353)
>
> at
> org.eclipse.osgi.storage.bundlefile.ZipBundleFile.doOpen(ZipBundleFile
> .java:51)
>
> at
> org.eclipse.osgi.storage.bundlefile.CloseableBundleFile.internalOpen(C
> loseableBundleFile.java:146)
>
> at
> org.eclipse.osgi.storage.bundlefile.CloseableBundleFile.lockOpen(Close
> ableBundleFile.java:83)
>
> at
> org.eclipse.osgi.storage.bundlefile.CloseableBundleFile.getEntry(Close
> ableBundleFile.java:285)
>
> at
> org.eclipse.osgi.storage.bundlefile.BundleFile.getResourceURL(BundleFi
> le.java:147)
>
> at
> org.eclipse.osgi.internal.loader.classpath.ClasspathEntry.findResource
> (ClasspathEntry.java:228)
>
> at
> org.eclipse.osgi.internal.loader.classpath.ClasspathManager.findLocalR
> esourceImpl(ClasspathManager.java:462)
>
> at
> org.eclipse.osgi.internal.loader.classpath.ClasspathManager.findLocalR
> esourceImpl(ClasspathManager.java:441)
>
> at
> org.eclipse.osgi.internal.loader.classpath.ClasspathManager.findLocalR
> esource(ClasspathManager.java:412)
>
> at
> org.eclipse.osgi.internal.loader.ModuleClassLoader.findLocalResource(M
> oduleClassLoader.java:340)
>
> at
> org.eclipse.osgi.internal.loader.BundleLoader.findLocalResource(Bundle
> Loader.java:952)
>
> at
> org.eclipse.osgi.internal.loader.sources.SingleSourcePackage.getResour
> ce(SingleSourcePackage.java:46)
>
> at
> org.eclipse.osgi.internal.loader.BundleLoader.findResource(BundleLoade
> r.java:710)
>
> at
> org.eclipse.osgi.internal.loader.ModuleClassLoader.getResource(ModuleC
> lassLoader.java:212)
>
> at
> java.base/java.lang.ClassLoader.getResource(ClassLoader.java:1413)
>
> at
> org.codehaus.groovy.control.ClassNodeResolver.findDecompiled(ClassNode
> Resolver.java:252)
>
> at
> org.codehaus.groovy.control.ClassNodeResolver.tryAsLoaderClassOrScript
> (ClassNodeResolver.java:193)
>
> at
> org.codehaus.groovy.control.ClassNodeResolver.findClassNode(ClassNodeR
> esolver.java:175)
>
> at
> org.codehaus.groovy.control.ClassNodeResolver.resolveName(ClassNodeRes
> olver.java:129)
>
> at
> org.codehaus.groovy.ast.decompiled.AsmReferenceResolver.resolveClassNu
> llable(AsmReferenceResolver.java:57)
>
> at
> org.codehaus.groovy.ast.decompiled.AsmReferenceResolver.resolveClass(A
> smReferenceResolver.java:44)
>
> at
> org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSi
> gnatureParser.java:113)
>
> at
> groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReade
> r.java:206)
>
> at
> groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.j
> ava:124)
>
> at
> org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSign
> ature(ClassSignatureParser.java:111)
>
> at
> org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass
> (ClassSignatureParser.java:35)
>
> at
> org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(
> DecompiledClassNode.java:189)
>
> at
> org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsType
> s(DecompiledClassNode.java:148)
>
> at
> org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSi
> gnatureParser.java:125)
>
> at
> groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReade
> r.java:206)
>
> at
> groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReade
> r.java:240)
>
> at
> groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.j
> ava:124)
>
> at
> org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSign
> ature(ClassSignatureParser.java:111)
>
> at
> org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass
> (ClassSignatureParser.java:35)
>
> at
> org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(
> DecompiledClassNode.java:189)
>
> at
> org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsType
> s(DecompiledClassNode.java:148)
>
> at
> org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSi
> gnatureParser.java:125)
>
> at
> groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReade
> r.java:206)
>
> at
> groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReade
> r.java:240)
>
> at
> groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.j
> ava:124)
>
> at
> org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSign
> ature(ClassSignatureParser.java:111)
>
> at
> org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass
> (ClassSignatureParser.java:35)
>
> at
> org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(
> DecompiledClassNode.java:189)
>
> at
> org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsType
> s(DecompiledClassNode.java:148)
>
> at
> org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSi
> gnatureParser.java:125)
>
> at
> groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReade
> r.java:206)
>
> at
> groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReade
> r.java:240)
>
> at
> groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.j
> ava:124)
>
>
>
> <<removed ~900 lines to make the email shorter>>
>
>
>
> at
> org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSign
> ature(ClassSignatureParser.java:111)
>
> at
> org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass
> (ClassSignatureParser.java:35)
>
> at
> org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(
> DecompiledClassNode.java:189)
>
> at
> org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsType
> s(DecompiledClassNode.java:148)
>
> at
> org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSi
> gnatureParser.java:125)
>
> at
> groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReade
> r.java:206)
>
> at
> groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReade
> r.java:240)
>
> at
> groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.j
> ava:124)
>
> at
> org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSign
> ature(ClassSignatureParser.java:111)
>
> at
> org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass
> (ClassSignatureParser.java:35)
>
> at
> org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(
> DecompiledClassNode.java:189)
>
> at
> org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsType
> s(DecompiledClassNode.java:148)
>
> at
> org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSi
> gnatureParser.java:125)
>
> at
> groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReade
> r.java:206)
>
> at
> groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReade
> r.java:240)
>
> at
> groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.j
> ava:124)
>
> at
> org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSign
> ature(ClassSignatureParser.java:111)
>
> at
> org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass
> (ClassSignatureParser.java:35)
>
> at
> org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(
> DecompiledClassNode.java:189)
>
> at
> org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsType
> s(DecompiledClassNode.java:148)
>
> at
> org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSi
> gnatureParser.java:125)
>
>
>
>
>
>
>
>
>
> Example 2 – The stack overflow seen with Groovy 3.0.23 when parsing one of our TPL template files:
>
>
>
> OpenJDK 64-Bit Server VM warning: Potentially dangerous stack overflow
> in ReservedStackAccess annotated method
> java.util.concurrent.locks.ReentrantReadWriteLock$Sync.tryAcquireShare
> d(I)I [1]
>
> [ERROR] Unhandled HTML reporter exception
>
> java.lang.IllegalStateException: Unexpected error loading template
> PacketTrace
>
> at
> com.protocrawler.jtf.reporting.testexecution.html.TemplateManagementSe
> rvice.<init>(TemplateManagementService.java:115)
>
> at
> com.protocrawler.jtf.reporting.testexecution.html.TemplateManagementSe
> rvice.getTemplateManagementService(TemplateManagementService.java:51)
>
> at
> org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.
> java:318)
>
> at
> com.protocrawler.jtf.reporting.testexecution.html.MultiFileTestExecuti
> onHTMLReporter.initialSetup(MultiFileTestExecutionHTMLReporter.groovy:
> 173)
>
> at
> com.protocrawler.pts.core.jtf.analysis.reporting.html.HTMLAnalysisRepo
> rter.super$2$initialSetup(HTMLAnalysisReporter.groovy)
>
> at
> java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(Direc
> tMethodHandleAccessor.java:103)
>
> at java.base/java.lang.reflect.Method.invoke(Method.java:580)
>
> at
> org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:1
> 07)
>
> at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:323)
>
> at
> groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1254)
>
> at
> org.codehaus.groovy.runtime.ScriptBytecodeAdapter.invokeMethodOnSuperN
> (ScriptBytecodeAdapter.java:144)
>
> at
> com.protocrawler.pts.core.jtf.analysis.reporting.html.HTMLAnalysisRepo
> rter.initialSetup(HTMLAnalysisReporter.groovy:94)
>
> at
> org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.
> java:318)
>
> at
> com.protocrawler.jtf.reporting.testexecution.html.MultiFileTestExecuti
> onHTMLReporter.generateReport(MultiFileTestExecutionHTMLReporter.groov
> y:98)
>
> at
> com.protocrawler.jtf.reporting.testexecution.html.cmdln.HTMTestExecuti
> onReport.performCommand(HTMTestExecutionReport.java:219)
>
> at
> com.protocrawler.jtf.reporting.testexecution.html.cmdln.HTMTestExecuti
> onReport.performCommand(HTMTestExecutionReport.java:36)
>
> at
> com.protocrawler.jstdlib.emfcore.cmdline.EMFSettingsCommandLineCommand
> .performCommand(EMFSettingsCommandLineCommand.java:111)
>
> at
> com.protocrawler.jstdlib.applications.cmdln.DefaultEclipseRCPCommandLi
> neApplication.start(DefaultEclipseRCPCommandLineApplication.java:126)
>
> at
> org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle
> .java:208)
>
> at
> org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplic
> ation(EclipseAppLauncher.java:143)
>
> at
> org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(Ecl
> ipseAppLauncher.java:109)
>
> at
> org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.jav
> a:439)
>
> at
> org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.jav
> a:271)
>
> at
> java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(Direc
> tMethodHandleAccessor.java:103)
>
> at java.base/java.lang.reflect.Method.invoke(Method.java:580)
>
> at
> org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:668)
>
> at org.eclipse.equinox.launcher.Main.basicRun(Main.java:605)
>
> at org.eclipse.equinox.launcher.Main.run(Main.java:1481)
>
> at org.eclipse.equinox.launcher.Main.main(Main.java:1454)
>
> Caused by: org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
>
> General error during canonicalization: Requesting upgrade to write lock.
>
>
>
> java.lang.IllegalMonitorStateException: Requesting upgrade to write lock.
>
> at
> org.eclipse.osgi.container.ModuleDatabase.writeLock(ModuleDatabase.jav
> a:840)
>
> at
> org.eclipse.osgi.container.ModuleContainer.applyDelta(ModuleContainer.
> java:984)
>
> at
> org.eclipse.osgi.container.ModuleContainer.resolveDynamic(ModuleContai
> ner.java:835)
>
> at
> org.eclipse.osgi.internal.loader.BundleLoader.findDynamicSource(Bundle
> Loader.java:1269)
>
> at
> org.eclipse.osgi.internal.loader.BundleLoader.findResource(BundleLoade
> r.java:729)
>
> at
> org.eclipse.osgi.internal.loader.ModuleClassLoader.getResource(ModuleC
> lassLoader.java:212)
>
> at
> java.base/java.lang.ClassLoader.getResource(ClassLoader.java:1413)
>
> at
> org.codehaus.groovy.control.ClassNodeResolver.findDecompiled(ClassNode
> Resolver.java:248)
>
> at
> org.codehaus.groovy.control.ClassNodeResolver.tryAsLoaderClassOrScript
> (ClassNodeResolver.java:189)
>
> at
> org.codehaus.groovy.control.ClassNodeResolver.findClassNode(ClassNodeR
> esolver.java:169)
>
> at
> org.codehaus.groovy.control.ClassNodeResolver.resolveName(ClassNodeRes
> olver.java:125)
>
> at
> org.codehaus.groovy.ast.decompiled.AsmReferenceResolver.resolveClassNu
> llable(AsmReferenceResolver.java:57)
>
> at
> org.codehaus.groovy.ast.decompiled.AsmReferenceResolver.resolveClass(A
> smReferenceResolver.java:44)
>
> at
> org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSi
> gnatureParser.java:102)
>
> at
> groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReade
> r.java:206)
>
> at
> groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.j
> ava:124)
>
> at
> org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSign
> ature(ClassSignatureParser.java:74)
>
> at
> org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass
> (ClassSignatureParser.java:32)
>
> at
> org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(
> DecompiledClassNode.java:163)
>
> at
> org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsType
> s(DecompiledClassNode.java:128)
>
> at
> org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSi
> gnatureParser.java:114)
>
> at
> groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReade
> r.java:206)
>
> at
> groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReade
> r.java:240)
>
> at
> groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.j
> ava:124)
>
> at
> org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSign
> ature(ClassSignatureParser.java:74)
>
> at
> org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass
> (ClassSignatureParser.java:32)
>
> at
> org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(
> DecompiledClassNode.java:163)
>
> at
> org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsType
> s(DecompiledClassNode.java:128)
>
> at
> org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSi
> gnatureParser.java:114)
>
> at
> groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReade
> r.java:206)
>
> at
> groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReade
> r.java:240)
>
> at
> groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.j
> ava:124)
>
> at
> org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSign
> ature(ClassSignatureParser.java:74)
>
> at
> org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass
> (ClassSignatureParser.java:32)
>
> at
> org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(
> DecompiledClassNode.java:163)
>
> at
> org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsType
> s(DecompiledClassNode.java:128)
>
> at
> org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSi
> gnatureParser.java:114)
>
> at
> groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReade
> r.java:206)
>
> at
> groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReade
> r.java:240)
>
> at
> groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.j
> ava:124)
>
> at
> org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSign
> ature(ClassSignatureParser.java:74)
>
> at
> org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass
> (ClassSignatureParser.java:32)
>
> at
> org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(
> DecompiledClassNode.java:163)
>
> at
> org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsType
> s(DecompiledClassNode.java:128)
>
> at
> org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSi
> gnatureParser.java:114)
>
> at
> groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReade
> r.java:206)
>
> at
> groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReade
> r.java:240)
>
> at
> groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.j
> ava:124)
>
>
>
> <<removed ~900 lines to make the email shorter>>
>
>
>
> at
> org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSign
> ature(ClassSignatureParser.java:74)
>
> at
> org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass
> (ClassSignatureParser.java:32)
>
> at
> org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(
> DecompiledClassNode.java:163)
>
> at
> org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsType
> s(DecompiledClassNode.java:128)
>
> at
> org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSi
> gnatureParser.java:114)
>
> at
> groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReade
> r.java:206)
>
> at
> groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReade
> r.java:240)
>
> at
> groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.j
> ava:124)
>
> at
> org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSign
> ature(ClassSignatureParser.java:74)
>
> at
> org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass
> (ClassSignatureParser.java:32)
>
> at
> org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(
> DecompiledClassNode.java:163)
>
> at
> org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsType
> s(DecompiledClassNode.java:128)
>
> at
> org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSi
> gnatureParser.java:114)
>
> at
> groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReade
> r.java:206)
>
> at
> groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReade
> r.java:240)
>
> at
> groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.j
> ava:124)
>
> at
> org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSign
> ature(ClassSignatureParser.java:74)
>
> at
> org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass
> (ClassSignatureParser.java:32)
>
> at
> org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(
> DecompiledClassNode.java:163)
>
> at
> org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsType
> s(DecompiledClassNode.java:128)
>
> at
> org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSi
> gnatureParser.java:114)
>
> at
> groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReade
> r.java:206)
>
> at
> groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReade
> r.java:240)
>
> at
> groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.j
> ava:124)
>
>
>
> 1 error
>
>
>
> at
> org.codehaus.groovy.control.ErrorCollector.failIfErrors(ErrorCollector
> .java:292)
>
> at
> org.codehaus.groovy.control.ErrorCollector.addException(ErrorCollector
> .java:140)
>
> at
> org.codehaus.groovy.control.CompilationUnit$IPrimaryClassNodeOperation
> .doPhaseOperation(CompilationUnit.java:977)
>
> at
> org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(Com
> pilationUnit.java:672)
>
> at
> org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.ja
> va:636)
>
> at
> groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:392)
>
> at
> groovy.lang.GroovyClassLoader.lambda$parseClass$3(GroovyClassLoader.ja
> va:335)
>
> at
> org.codehaus.groovy.runtime.memoize.StampedCommonCache.compute(Stamped
> CommonCache.java:163)
>
> at
> org.codehaus.groovy.runtime.memoize.StampedCommonCache.getAndPut(Stamp
> edCommonCache.java:154)
>
> at
> groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:333)
>
> at
> groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:317)
>
> at
> groovy.text.markup.MarkupTemplateEngine$TemplateGroovyClassLoader.pars
> eClass(MarkupTemplateEngine.java:256)
>
> at
> groovy.text.markup.MarkupTemplateEngine$MarkupTemplateMaker.<init>(Mar
> kupTemplateEngine.java:229)
>
> at
> groovy.text.markup.MarkupTemplateEngine.createTemplate(MarkupTemplateE
> ngine.java:174)
>
> at
> com.protocrawler.jtf.reporting.testexecution.html.TemplateManagementSe
> rvice.loadTemplate(TemplateManagementService.java:142)
>
> at
> com.protocrawler.jtf.reporting.testexecution.html.TemplateManagementSe
> rvice.getTemplateFromInfo(TemplateManagementService.java:175)
>
> at
> com.protocrawler.jtf.reporting.testexecution.html.TemplateManagementSe
> rvice.<init>(TemplateManagementService.java:111)
>
> ... 28 common frames omitted
>
> Error occurred during execution: Unexpected error loading template
> PacketTrace
>
>
>
> Does anyone have any suggestions of what the cause of these issues may be, or steps we could take to avoid the issues please?
>
>
>
>
>
> If it’s relevant here, the JRE we’re currently using is Just J OpenJDK JRE 21.0.5, though we’ve tried other versions of OpenJDK including 17.x and still see the same issues.
>
>
>
> Best Regards,
>
>
>
> Rich.
>
>
Re: Intermittent Groovy stack overflow exceptions and hangs
Posted by Paul King <pa...@asert.com.au>.
Hi Rich,
I suggest you create an issue in our Jira. It is hard to tell from
that stacktrace whether it is a Groovy or OSGi issue, but we'd like to
understand in either case.
The tricky aspect will be for us to reproduce your issue locally. Do
you think creating a simple hello world application to replicate what
you have is feasible?
Cheers,
Paul.
On Mon, Mar 10, 2025 at 6:00 PM Richard Harker
<ri...@cytal.co.uk> wrote:
>
> Hi All.
>
>
>
> We develop an OSGI Eclipse E4 based application which is written in a combination of Java and Groovy. The application makes use of Groovy templates dynamically loaded at runtime (to facilitate providing HTML reports) and provides provision for the user to provide Groovy scripts which are parsed and run by a GroovyShell at runtime.
>
>
>
> For some time now we’ve been seeing issues with intermittent stack overflow exceptions and intermittent hangs - both when the application loads the Groovy templates and when the application compiles the Groovy scripts.
>
>
>
> The stack overflow exceptions appear to be originating from Groovy and given the hangs appear to occur interchangeably for the stack overflow exceptions, our suspicion is that the hangs are potentially a different manifestation of the same underlying issue.
>
>
>
> We’ve been using Groovy for some years, and when we were on Groovy 2.5.x did not see these issues at all. We see them on both Groovy 3.x and on 4.x, with them seemingly being more frequent on Groovy 4.x.
>
>
>
> Has anyone else seen these types of issues? I’ve included two example stack traces below. I’ve truncated each stack trace in the middle of the repeating lines, so the email is not huge.
>
>
>
>
>
>
>
> Example stack trace 1 – from when we saw the Stack Overflow Exception with latest Groovy (4.0.26), when the Groovy Shell parses a Groovy script.
>
>
>
> !ENTRY com.protocrawler.jstdlib.core 4 0 2025-03-04 09:17:15.877
>
> !MESSAGE FrameworkEvent ERROR
>
> !STACK 0
>
> java.lang.StackOverflowError
>
> at java.base/java.lang.String.startsWith(String.java:2327)
>
> at java.base/sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:97)
>
> at java.base/sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:77)
>
> at java.base/sun.nio.fs.WindowsPath.parse(WindowsPath.java:92)
>
> at java.base/sun.nio.fs.WindowsFileSystem.getPath(WindowsFileSystem.java:231)
>
> at java.base/java.util.zip.ZipFile$Source.get(ZipFile.java:1445)
>
> at java.base/java.util.zip.ZipFile$CleanableResource.<init>(ZipFile.java:724)
>
> at java.base/java.util.zip.ZipFile.<init>(ZipFile.java:251)
>
> at java.base/java.util.zip.ZipFile.<init>(ZipFile.java:180)
>
> at java.base/java.util.zip.ZipFile.<init>(ZipFile.java:194)
>
> at org.eclipse.osgi.framework.util.SecureAction.getZipFile(SecureAction.java:353)
>
> at org.eclipse.osgi.storage.bundlefile.ZipBundleFile.doOpen(ZipBundleFile.java:51)
>
> at org.eclipse.osgi.storage.bundlefile.CloseableBundleFile.internalOpen(CloseableBundleFile.java:146)
>
> at org.eclipse.osgi.storage.bundlefile.CloseableBundleFile.lockOpen(CloseableBundleFile.java:83)
>
> at org.eclipse.osgi.storage.bundlefile.CloseableBundleFile.getEntry(CloseableBundleFile.java:285)
>
> at org.eclipse.osgi.storage.bundlefile.BundleFile.getResourceURL(BundleFile.java:147)
>
> at org.eclipse.osgi.internal.loader.classpath.ClasspathEntry.findResource(ClasspathEntry.java:228)
>
> at org.eclipse.osgi.internal.loader.classpath.ClasspathManager.findLocalResourceImpl(ClasspathManager.java:462)
>
> at org.eclipse.osgi.internal.loader.classpath.ClasspathManager.findLocalResourceImpl(ClasspathManager.java:441)
>
> at org.eclipse.osgi.internal.loader.classpath.ClasspathManager.findLocalResource(ClasspathManager.java:412)
>
> at org.eclipse.osgi.internal.loader.ModuleClassLoader.findLocalResource(ModuleClassLoader.java:340)
>
> at org.eclipse.osgi.internal.loader.BundleLoader.findLocalResource(BundleLoader.java:952)
>
> at org.eclipse.osgi.internal.loader.sources.SingleSourcePackage.getResource(SingleSourcePackage.java:46)
>
> at org.eclipse.osgi.internal.loader.BundleLoader.findResource(BundleLoader.java:710)
>
> at org.eclipse.osgi.internal.loader.ModuleClassLoader.getResource(ModuleClassLoader.java:212)
>
> at java.base/java.lang.ClassLoader.getResource(ClassLoader.java:1413)
>
> at org.codehaus.groovy.control.ClassNodeResolver.findDecompiled(ClassNodeResolver.java:252)
>
> at org.codehaus.groovy.control.ClassNodeResolver.tryAsLoaderClassOrScript(ClassNodeResolver.java:193)
>
> at org.codehaus.groovy.control.ClassNodeResolver.findClassNode(ClassNodeResolver.java:175)
>
> at org.codehaus.groovy.control.ClassNodeResolver.resolveName(ClassNodeResolver.java:129)
>
> at org.codehaus.groovy.ast.decompiled.AsmReferenceResolver.resolveClassNullable(AsmReferenceResolver.java:57)
>
> at org.codehaus.groovy.ast.decompiled.AsmReferenceResolver.resolveClass(AsmReferenceResolver.java:44)
>
> at org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:113)
>
> at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:206)
>
> at groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.java:124)
>
> at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSignature(ClassSignatureParser.java:111)
>
> at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass(ClassSignatureParser.java:35)
>
> at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(DecompiledClassNode.java:189)
>
> at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTypes(DecompiledClassNode.java:148)
>
> at org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:125)
>
> at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:206)
>
> at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:240)
>
> at groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.java:124)
>
> at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSignature(ClassSignatureParser.java:111)
>
> at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass(ClassSignatureParser.java:35)
>
> at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(DecompiledClassNode.java:189)
>
> at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTypes(DecompiledClassNode.java:148)
>
> at org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:125)
>
> at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:206)
>
> at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:240)
>
> at groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.java:124)
>
> at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSignature(ClassSignatureParser.java:111)
>
> at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass(ClassSignatureParser.java:35)
>
> at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(DecompiledClassNode.java:189)
>
> at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTypes(DecompiledClassNode.java:148)
>
> at org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:125)
>
> at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:206)
>
> at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:240)
>
> at groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.java:124)
>
>
>
> <<removed ~900 lines to make the email shorter>>
>
>
>
> at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSignature(ClassSignatureParser.java:111)
>
> at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass(ClassSignatureParser.java:35)
>
> at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(DecompiledClassNode.java:189)
>
> at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTypes(DecompiledClassNode.java:148)
>
> at org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:125)
>
> at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:206)
>
> at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:240)
>
> at groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.java:124)
>
> at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSignature(ClassSignatureParser.java:111)
>
> at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass(ClassSignatureParser.java:35)
>
> at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(DecompiledClassNode.java:189)
>
> at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTypes(DecompiledClassNode.java:148)
>
> at org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:125)
>
> at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:206)
>
> at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:240)
>
> at groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.java:124)
>
> at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSignature(ClassSignatureParser.java:111)
>
> at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass(ClassSignatureParser.java:35)
>
> at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(DecompiledClassNode.java:189)
>
> at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTypes(DecompiledClassNode.java:148)
>
> at org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:125)
>
>
>
>
>
>
>
>
>
> Example 2 – The stack overflow seen with Groovy 3.0.23 when parsing one of our TPL template files:
>
>
>
> OpenJDK 64-Bit Server VM warning: Potentially dangerous stack overflow in ReservedStackAccess annotated method java.util.concurrent.locks.ReentrantReadWriteLock$Sync.tryAcquireShared(I)I [1]
>
> [ERROR] Unhandled HTML reporter exception
>
> java.lang.IllegalStateException: Unexpected error loading template PacketTrace
>
> at com.protocrawler.jtf.reporting.testexecution.html.TemplateManagementService.<init>(TemplateManagementService.java:115)
>
> at com.protocrawler.jtf.reporting.testexecution.html.TemplateManagementService.getTemplateManagementService(TemplateManagementService.java:51)
>
> at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:318)
>
> at com.protocrawler.jtf.reporting.testexecution.html.MultiFileTestExecutionHTMLReporter.initialSetup(MultiFileTestExecutionHTMLReporter.groovy:173)
>
> at com.protocrawler.pts.core.jtf.analysis.reporting.html.HTMLAnalysisReporter.super$2$initialSetup(HTMLAnalysisReporter.groovy)
>
> at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
>
> at java.base/java.lang.reflect.Method.invoke(Method.java:580)
>
> at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:107)
>
> at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:323)
>
> at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1254)
>
> at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.invokeMethodOnSuperN(ScriptBytecodeAdapter.java:144)
>
> at com.protocrawler.pts.core.jtf.analysis.reporting.html.HTMLAnalysisReporter.initialSetup(HTMLAnalysisReporter.groovy:94)
>
> at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:318)
>
> at com.protocrawler.jtf.reporting.testexecution.html.MultiFileTestExecutionHTMLReporter.generateReport(MultiFileTestExecutionHTMLReporter.groovy:98)
>
> at com.protocrawler.jtf.reporting.testexecution.html.cmdln.HTMTestExecutionReport.performCommand(HTMTestExecutionReport.java:219)
>
> at com.protocrawler.jtf.reporting.testexecution.html.cmdln.HTMTestExecutionReport.performCommand(HTMTestExecutionReport.java:36)
>
> at com.protocrawler.jstdlib.emfcore.cmdline.EMFSettingsCommandLineCommand.performCommand(EMFSettingsCommandLineCommand.java:111)
>
> at com.protocrawler.jstdlib.applications.cmdln.DefaultEclipseRCPCommandLineApplication.start(DefaultEclipseRCPCommandLineApplication.java:126)
>
> at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:208)
>
> at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:143)
>
> at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:109)
>
> at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:439)
>
> at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:271)
>
> at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
>
> at java.base/java.lang.reflect.Method.invoke(Method.java:580)
>
> at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:668)
>
> at org.eclipse.equinox.launcher.Main.basicRun(Main.java:605)
>
> at org.eclipse.equinox.launcher.Main.run(Main.java:1481)
>
> at org.eclipse.equinox.launcher.Main.main(Main.java:1454)
>
> Caused by: org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
>
> General error during canonicalization: Requesting upgrade to write lock.
>
>
>
> java.lang.IllegalMonitorStateException: Requesting upgrade to write lock.
>
> at org.eclipse.osgi.container.ModuleDatabase.writeLock(ModuleDatabase.java:840)
>
> at org.eclipse.osgi.container.ModuleContainer.applyDelta(ModuleContainer.java:984)
>
> at org.eclipse.osgi.container.ModuleContainer.resolveDynamic(ModuleContainer.java:835)
>
> at org.eclipse.osgi.internal.loader.BundleLoader.findDynamicSource(BundleLoader.java:1269)
>
> at org.eclipse.osgi.internal.loader.BundleLoader.findResource(BundleLoader.java:729)
>
> at org.eclipse.osgi.internal.loader.ModuleClassLoader.getResource(ModuleClassLoader.java:212)
>
> at java.base/java.lang.ClassLoader.getResource(ClassLoader.java:1413)
>
> at org.codehaus.groovy.control.ClassNodeResolver.findDecompiled(ClassNodeResolver.java:248)
>
> at org.codehaus.groovy.control.ClassNodeResolver.tryAsLoaderClassOrScript(ClassNodeResolver.java:189)
>
> at org.codehaus.groovy.control.ClassNodeResolver.findClassNode(ClassNodeResolver.java:169)
>
> at org.codehaus.groovy.control.ClassNodeResolver.resolveName(ClassNodeResolver.java:125)
>
> at org.codehaus.groovy.ast.decompiled.AsmReferenceResolver.resolveClassNullable(AsmReferenceResolver.java:57)
>
> at org.codehaus.groovy.ast.decompiled.AsmReferenceResolver.resolveClass(AsmReferenceResolver.java:44)
>
> at org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:102)
>
> at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:206)
>
> at groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.java:124)
>
> at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSignature(ClassSignatureParser.java:74)
>
> at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass(ClassSignatureParser.java:32)
>
> at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(DecompiledClassNode.java:163)
>
> at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTypes(DecompiledClassNode.java:128)
>
> at org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:114)
>
> at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:206)
>
> at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:240)
>
> at groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.java:124)
>
> at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSignature(ClassSignatureParser.java:74)
>
> at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass(ClassSignatureParser.java:32)
>
> at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(DecompiledClassNode.java:163)
>
> at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTypes(DecompiledClassNode.java:128)
>
> at org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:114)
>
> at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:206)
>
> at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:240)
>
> at groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.java:124)
>
> at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSignature(ClassSignatureParser.java:74)
>
> at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass(ClassSignatureParser.java:32)
>
> at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(DecompiledClassNode.java:163)
>
> at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTypes(DecompiledClassNode.java:128)
>
> at org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:114)
>
> at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:206)
>
> at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:240)
>
> at groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.java:124)
>
> at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSignature(ClassSignatureParser.java:74)
>
> at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass(ClassSignatureParser.java:32)
>
> at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(DecompiledClassNode.java:163)
>
> at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTypes(DecompiledClassNode.java:128)
>
> at org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:114)
>
> at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:206)
>
> at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:240)
>
> at groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.java:124)
>
>
>
> <<removed ~900 lines to make the email shorter>>
>
>
>
> at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSignature(ClassSignatureParser.java:74)
>
> at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass(ClassSignatureParser.java:32)
>
> at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(DecompiledClassNode.java:163)
>
> at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTypes(DecompiledClassNode.java:128)
>
> at org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:114)
>
> at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:206)
>
> at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:240)
>
> at groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.java:124)
>
> at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSignature(ClassSignatureParser.java:74)
>
> at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass(ClassSignatureParser.java:32)
>
> at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(DecompiledClassNode.java:163)
>
> at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTypes(DecompiledClassNode.java:128)
>
> at org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:114)
>
> at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:206)
>
> at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:240)
>
> at groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.java:124)
>
> at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSignature(ClassSignatureParser.java:74)
>
> at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass(ClassSignatureParser.java:32)
>
> at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(DecompiledClassNode.java:163)
>
> at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTypes(DecompiledClassNode.java:128)
>
> at org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:114)
>
> at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:206)
>
> at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:240)
>
> at groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.java:124)
>
>
>
> 1 error
>
>
>
> at org.codehaus.groovy.control.ErrorCollector.failIfErrors(ErrorCollector.java:292)
>
> at org.codehaus.groovy.control.ErrorCollector.addException(ErrorCollector.java:140)
>
> at org.codehaus.groovy.control.CompilationUnit$IPrimaryClassNodeOperation.doPhaseOperation(CompilationUnit.java:977)
>
> at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:672)
>
> at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:636)
>
> at groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:392)
>
> at groovy.lang.GroovyClassLoader.lambda$parseClass$3(GroovyClassLoader.java:335)
>
> at org.codehaus.groovy.runtime.memoize.StampedCommonCache.compute(StampedCommonCache.java:163)
>
> at org.codehaus.groovy.runtime.memoize.StampedCommonCache.getAndPut(StampedCommonCache.java:154)
>
> at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:333)
>
> at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:317)
>
> at groovy.text.markup.MarkupTemplateEngine$TemplateGroovyClassLoader.parseClass(MarkupTemplateEngine.java:256)
>
> at groovy.text.markup.MarkupTemplateEngine$MarkupTemplateMaker.<init>(MarkupTemplateEngine.java:229)
>
> at groovy.text.markup.MarkupTemplateEngine.createTemplate(MarkupTemplateEngine.java:174)
>
> at com.protocrawler.jtf.reporting.testexecution.html.TemplateManagementService.loadTemplate(TemplateManagementService.java:142)
>
> at com.protocrawler.jtf.reporting.testexecution.html.TemplateManagementService.getTemplateFromInfo(TemplateManagementService.java:175)
>
> at com.protocrawler.jtf.reporting.testexecution.html.TemplateManagementService.<init>(TemplateManagementService.java:111)
>
> ... 28 common frames omitted
>
> Error occurred during execution: Unexpected error loading template PacketTrace
>
>
>
> Does anyone have any suggestions of what the cause of these issues may be, or steps we could take to avoid the issues please?
>
>
>
>
>
> If it’s relevant here, the JRE we’re currently using is Just J OpenJDK JRE 21.0.5, though we’ve tried other versions of OpenJDK including 17.x and still see the same issues.
>
>
>
> Best Regards,
>
>
>
> Rich.
>
>
Re: Intermittent Groovy stack overflow exceptions and hangs
Posted by Jochen Theodorou <bl...@gmx.org>.
On 3/10/25 08:58, Richard Harker wrote:
> Hi All.
>
> We develop an OSGI Eclipse E4 based application which is written in a
> combination of Java and Groovy. The application makes use of Groovy
> templates dynamically loaded at runtime (to facilitate providing HTML
> reports) and provides provision for the user to provide Groovy scripts
> which are parsed and run by a GroovyShell at runtime.
a GRoovyShell... good that means you can set a CompilerConfiguration
[...]
> We’ve been using Groovy for some years, and when we were on Groovy 2.5.x
> did not see these issues at all. We see them on both Groovy 3.x and on
> 4.x, with them seemingly being more frequent on Groovy 4.x.
probably because Asm resolving is increased.
> Has anyone else seen these types of issues? I’ve included two example
> stack traces below. I’ve truncated each stack trace in the middle of the
> repeating lines, so the email is not huge.
>
> _Example stack trace 1 – from when we saw the Stack Overflow Exception
> with latest Groovy (4.0.26), when the Groovy Shell parses a Groovy script._
>
[...]
> at org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:125)
>
> at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:206)
>
> at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:240)
>
> at groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.java:124)
>
> at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSignature(ClassSignatureParser.java:111)
>
> at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass(ClassSignatureParser.java:35)
>
> at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(DecompiledClassNode.java:189)
>
> at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTypes(DecompiledClassNode.java:148)
>
> at org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:125)
[...]
This seems to contain the loop. Assuming this is always the same
instance, then lazyInitSuper is supposed to be called only once early on
for the currently parsed class. If it really is the same instance then
this should be some kind of self reference. I also see generics involved
- potentially... So maybe something like
class Foo<T extends Foo>
or
class Foo implements Bar<Foo>
Important to note here... This class Foo is not a Groovy script and is
not loaded from the class path. Instead Groovy tries to load the zip file.
> _Example 2 – The stack overflow seen with Groovy 3.0.23 when parsing one
> of our TPL template files:_
[...]
> at
> org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:114)
>
> at
> groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:206)
>
> at
> groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:240)
>
> at
> groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.java:124)
>
> at
> org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSignature(ClassSignatureParser.java:74)
>
> at
> org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass(ClassSignatureParser.java:32)
>
> at
> org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(DecompiledClassNode.java:163)
>
> at
> org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTypes(DecompiledClassNode.java:128)
>
> at
> org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:114)
This loop looks quite similar.
> Does anyone have any suggestions of what the cause of these issues may
> be, or steps we could take to avoid the issues please?
>
> If it’s relevant here, the JRE we’re currently using is Just J OpenJDK
> JRE 21.0.5, though we’ve tried other versions of OpenJDK including 17.x
> and still see the same issues.
what exactly I do not know. I assume Groovy is loading a class from a
zip file which contains a signature, which is no handled properly. As
written already I assume it is a self reference, where the class we
currently investigate (from the zip) appears in the signature itself.
But that is just a guess.
There might be a way around this. Since you use GroovyShell to compile
you can set (or already do so) a CompilerConfiguration. Could you please
set a configuration in which you get set the optimization option
"asmResolving". Something like this
CompilerConfiguration newConfig = new
CompilerConfiguration(CompilerConfiguration.DEFAULT)
Map optOptions = new
HashMap(CompilerConfiguration.DEFAULT.getOptimizationsOptions())
optOptions.set("asmResolving", false)
newConfig.setOptimizationOptions(optOptions)
groovyCompiler.setConfig....
This should avoid the loop since then the code causing this is no longer
in use. It may cuase a class not being found though. This option is no
officially supported option. WE have it mostly for testing and
debugging. This also means the name could change.
Thus, we also have to try finding the problem in the SignatureParsing
bye Jochen
RE: Intermittent Groovy stack overflow exceptions and hangs
Posted by Richard Harker <ri...@cytal.co.uk>.
Hi Tommy
Thank you for the response. I understand your concerns and this is indeed a risk - though the issue is being seen in our application by us in our R&D team using Groovy scripts that we have created - not unknown scripts from random users. The issue occurs seemingly at random, and can occur when the application attempts to parse even very simple one-line scripts that do not appear to contain anything contentious.
Even if you disregard the part of the issue where I wrote about the user being able to run Groovy scripts, we still see the same intermittent issue when parsing our TPL files (and to be clear, this can be seen on a fresh start of the application, not having executed any Groovy scripts).
As suggested by Paul in the other response I'll raise it as a Jira ticket as soon as my Jira access is approved.
Best Regards,
Rich
From: Tommy <to...@natusoft.se>
Sent: 10 March 2025 10:27
To: users@groovy.apache.org
Subject: Re: Intermittent Groovy stack overflow exceptions and hangs
This part sounds potentially dangerous to me:
We develop an OSGI Eclipse E4 based application which is written in a combination of Java and Groovy. The application makes use of Groovy templates dynamically loaded at runtime (to facilitate providing HTML reports) and provides provision for the user to provide Groovy scripts which are parsed and run by a GroovyShell at runtime.
Is this user provided Groovy shell code somehow isolated from application code ? If not that sounds dangerous to me, and can cause unexpected side effects. Or are all users experienced developers with deep understanding of the application? Even if so I'm skeptical.
BR / Tommy
______________________
Tommy Svensson
tommy@natusoft.se<ht...@natusoft.se>
On 10 Mar 2025 at 08:59 +0100, Richard Harker <ri...@cytal.co.uk>>, wrote:
Hi All.
We develop an OSGI Eclipse E4 based application which is written in a combination of Java and Groovy. The application makes use of Groovy templates dynamically loaded at runtime (to facilitate providing HTML reports) and provides provision for the user to provide Groovy scripts which are parsed and run by a GroovyShell at runtime.
For some time now we've been seeing issues with intermittent stack overflow exceptions and intermittent hangs - both when the application loads the Groovy templates and when the application compiles the Groovy scripts.
The stack overflow exceptions appear to be originating from Groovy and given the hangs appear to occur interchangeably for the stack overflow exceptions, our suspicion is that the hangs are potentially a different manifestation of the same underlying issue.
We've been using Groovy for some years, and when we were on Groovy 2.5.x did not see these issues at all. We see them on both Groovy 3.x and on 4.x, with them seemingly being more frequent on Groovy 4.x.
Has anyone else seen these types of issues? I've included two example stack traces below. I've truncated each stack trace in the middle of the repeating lines, so the email is not huge.
Example stack trace 1 - from when we saw the Stack Overflow Exception with latest Groovy (4.0.26), when the Groovy Shell parses a Groovy script.
!ENTRY com.protocrawler.jstdlib.core 4 0 2025-03-04 09:17:15.877
!MESSAGE FrameworkEvent ERROR
!STACK 0
java.lang.StackOverflowError
at java.base/java.lang.String.startsWith(String.java:2327)
at java.base/sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:97)
at java.base/sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:77)
at java.base/sun.nio.fs.WindowsPath.parse(WindowsPath.java:92)
at java.base/sun.nio.fs.WindowsFileSystem.getPath(WindowsFileSystem.java:231)
at java.base/java.util.zip.ZipFile$Source.get(ZipFile.java:1445)
at java.base/java.util.zip.ZipFile$CleanableResource.<init>(ZipFile.java:724)
at java.base/java.util.zip.ZipFile.<init>(ZipFile.java:251)
at java.base/java.util.zip.ZipFile.<init>(ZipFile.java:180)
at java.base/java.util.zip.ZipFile.<init>(ZipFile.java:194)
at org.eclipse.osgi.framework.util.SecureAction.getZipFile(SecureAction.java:353)
at org.eclipse.osgi.storage.bundlefile.ZipBundleFile.doOpen(ZipBundleFile.java:51)
at org.eclipse.osgi.storage.bundlefile.CloseableBundleFile.internalOpen(CloseableBundleFile.java:146)
at org.eclipse.osgi.storage.bundlefile.CloseableBundleFile.lockOpen(CloseableBundleFile.java:83)
at org.eclipse.osgi.storage.bundlefile.CloseableBundleFile.getEntry(CloseableBundleFile.java:285)
at org.eclipse.osgi.storage.bundlefile.BundleFile.getResourceURL(BundleFile.java:147)
at org.eclipse.osgi.internal.loader.classpath.ClasspathEntry.findResource(ClasspathEntry.java:228)
at org.eclipse.osgi.internal.loader.classpath.ClasspathManager.findLocalResourceImpl(ClasspathManager.java:462)
at org.eclipse.osgi.internal.loader.classpath.ClasspathManager.findLocalResourceImpl(ClasspathManager.java:441)
at org.eclipse.osgi.internal.loader.classpath.ClasspathManager.findLocalResource(ClasspathManager.java:412)
at org.eclipse.osgi.internal.loader.ModuleClassLoader.findLocalResource(ModuleClassLoader.java:340)
at org.eclipse.osgi.internal.loader.BundleLoader.findLocalResource(BundleLoader.java:952)
at org.eclipse.osgi.internal.loader.sources.SingleSourcePackage.getResource(SingleSourcePackage.java:46)
at org.eclipse.osgi.internal.loader.BundleLoader.findResource(BundleLoader.java:710)
at org.eclipse.osgi.internal.loader.ModuleClassLoader.getResource(ModuleClassLoader.java:212)
at java.base/java.lang.ClassLoader.getResource(ClassLoader.java:1413)
at org.codehaus.groovy.control.ClassNodeResolver.findDecompiled(ClassNodeResolver.java:252)
at org.codehaus.groovy.control.ClassNodeResolver.tryAsLoaderClassOrScript(ClassNodeResolver.java:193)
at org.codehaus.groovy.control.ClassNodeResolver.findClassNode(ClassNodeResolver.java:175)
at org.codehaus.groovy.control.ClassNodeResolver.resolveName(ClassNodeResolver.java:129)
at org.codehaus.groovy.ast.decompiled.AsmReferenceResolver.resolveClassNullable(AsmReferenceResolver.java:57)
at org.codehaus.groovy.ast.decompiled.AsmReferenceResolver.resolveClass(AsmReferenceResolver.java:44)
at org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:113)
at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:206)
at groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.java:124)
at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSignature(ClassSignatureParser.java:111)
at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass(ClassSignatureParser.java:35)
at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(DecompiledClassNode.java:189)
at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTypes(DecompiledClassNode.java:148)
at org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:125)
at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:206)
at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:240)
at groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.java:124)
at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSignature(ClassSignatureParser.java:111)
at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass(ClassSignatureParser.java:35)
at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(DecompiledClassNode.java:189)
at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTypes(DecompiledClassNode.java:148)
at org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:125)
at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:206)
at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:240)
at groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.java:124)
at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSignature(ClassSignatureParser.java:111)
at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass(ClassSignatureParser.java:35)
at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(DecompiledClassNode.java:189)
at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTypes(DecompiledClassNode.java:148)
at org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:125)
at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:206)
at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:240)
at groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.java:124)
<<removed ~900 lines to make the email shorter>>
at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSignature(ClassSignatureParser.java:111)
at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass(ClassSignatureParser.java:35)
at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(DecompiledClassNode.java:189)
at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTypes(DecompiledClassNode.java:148)
at org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:125)
at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:206)
at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:240)
at groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.java:124)
at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSignature(ClassSignatureParser.java:111)
at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass(ClassSignatureParser.java:35)
at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(DecompiledClassNode.java:189)
at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTypes(DecompiledClassNode.java:148)
at org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:125)
at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:206)
at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:240)
at groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.java:124)
at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSignature(ClassSignatureParser.java:111)
at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass(ClassSignatureParser.java:35)
at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(DecompiledClassNode.java:189)
at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTypes(DecompiledClassNode.java:148)
at org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:125)
Example 2 - The stack overflow seen with Groovy 3.0.23 when parsing one of our TPL template files:
OpenJDK 64-Bit Server VM warning: Potentially dangerous stack overflow in ReservedStackAccess annotated method java.util.concurrent.locks.ReentrantReadWriteLock$Sync.tryAcquireShared(I)I [1]
[ERROR] Unhandled HTML reporter exception
java.lang.IllegalStateException: Unexpected error loading template PacketTrace
at com.protocrawler.jtf.reporting.testexecution.html.TemplateManagementService.<init>(TemplateManagementService.java:115)
at com.protocrawler.jtf.reporting.testexecution.html.TemplateManagementService.getTemplateManagementService(TemplateManagementService.java:51)
at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:318)
at com.protocrawler.jtf.reporting.testexecution.html.MultiFileTestExecutionHTMLReporter.initialSetup(MultiFileTestExecutionHTMLReporter.groovy:173)
at com.protocrawler.pts.core.jtf.analysis.reporting.html.HTMLAnalysisReporter.super$2$initialSetup(HTMLAnalysisReporter.groovy)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:107)
at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:323)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1254)
at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.invokeMethodOnSuperN(ScriptBytecodeAdapter.java:144)
at com.protocrawler.pts.core.jtf.analysis.reporting.html.HTMLAnalysisReporter.initialSetup(HTMLAnalysisReporter.groovy:94)
at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:318)
at com.protocrawler.jtf.reporting.testexecution.html.MultiFileTestExecutionHTMLReporter.generateReport(MultiFileTestExecutionHTMLReporter.groovy:98)
at com.protocrawler.jtf.reporting.testexecution.html.cmdln.HTMTestExecutionReport.performCommand(HTMTestExecutionReport.java:219)
at com.protocrawler.jtf.reporting.testexecution.html.cmdln.HTMTestExecutionReport.performCommand(HTMTestExecutionReport.java:36)
at com.protocrawler.jstdlib.emfcore.cmdline.EMFSettingsCommandLineCommand.performCommand(EMFSettingsCommandLineCommand.java:111)
at com.protocrawler.jstdlib.applications.cmdln.DefaultEclipseRCPCommandLineApplication.start(DefaultEclipseRCPCommandLineApplication.java:126)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:208)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:143)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:109)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:439)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:271)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:668)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:605)
at org.eclipse.equinox.launcher.Main.run(Main.java:1481)
at org.eclipse.equinox.launcher.Main.main(Main.java:1454)
Caused by: org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
General error during canonicalization: Requesting upgrade to write lock.
java.lang.IllegalMonitorStateException: Requesting upgrade to write lock.
at org.eclipse.osgi.container.ModuleDatabase.writeLock(ModuleDatabase.java:840)
at org.eclipse.osgi.container.ModuleContainer.applyDelta(ModuleContainer.java:984)
at org.eclipse.osgi.container.ModuleContainer.resolveDynamic(ModuleContainer.java:835)
at org.eclipse.osgi.internal.loader.BundleLoader.findDynamicSource(BundleLoader.java:1269)
at org.eclipse.osgi.internal.loader.BundleLoader.findResource(BundleLoader.java:729)
at org.eclipse.osgi.internal.loader.ModuleClassLoader.getResource(ModuleClassLoader.java:212)
at java.base/java.lang.ClassLoader.getResource(ClassLoader.java:1413)
at org.codehaus.groovy.control.ClassNodeResolver.findDecompiled(ClassNodeResolver.java:248)
at org.codehaus.groovy.control.ClassNodeResolver.tryAsLoaderClassOrScript(ClassNodeResolver.java:189)
at org.codehaus.groovy.control.ClassNodeResolver.findClassNode(ClassNodeResolver.java:169)
at org.codehaus.groovy.control.ClassNodeResolver.resolveName(ClassNodeResolver.java:125)
at org.codehaus.groovy.ast.decompiled.AsmReferenceResolver.resolveClassNullable(AsmReferenceResolver.java:57)
at org.codehaus.groovy.ast.decompiled.AsmReferenceResolver.resolveClass(AsmReferenceResolver.java:44)
at org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:102)
at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:206)
at groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.java:124)
at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSignature(ClassSignatureParser.java:74)
at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass(ClassSignatureParser.java:32)
at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(DecompiledClassNode.java:163)
at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTypes(DecompiledClassNode.java:128)
at org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:114)
at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:206)
at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:240)
at groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.java:124)
at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSignature(ClassSignatureParser.java:74)
at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass(ClassSignatureParser.java:32)
at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(DecompiledClassNode.java:163)
at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTypes(DecompiledClassNode.java:128)
at org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:114)
at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:206)
at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:240)
at groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.java:124)
at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSignature(ClassSignatureParser.java:74)
at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass(ClassSignatureParser.java:32)
at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(DecompiledClassNode.java:163)
at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTypes(DecompiledClassNode.java:128)
at org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:114)
at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:206)
at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:240)
at groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.java:124)
at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSignature(ClassSignatureParser.java:74)
at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass(ClassSignatureParser.java:32)
at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(DecompiledClassNode.java:163)
at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTypes(DecompiledClassNode.java:128)
at org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:114)
at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:206)
at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:240)
at groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.java:124)
<<removed ~900 lines to make the email shorter>>
at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSignature(ClassSignatureParser.java:74)
at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass(ClassSignatureParser.java:32)
at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(DecompiledClassNode.java:163)
at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTypes(DecompiledClassNode.java:128)
at org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:114)
at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:206)
at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:240)
at groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.java:124)
at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSignature(ClassSignatureParser.java:74)
at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass(ClassSignatureParser.java:32)
at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(DecompiledClassNode.java:163)
at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTypes(DecompiledClassNode.java:128)
at org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:114)
at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:206)
at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:240)
at groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.java:124)
at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSignature(ClassSignatureParser.java:74)
at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass(ClassSignatureParser.java:32)
at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(DecompiledClassNode.java:163)
at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTypes(DecompiledClassNode.java:128)
at org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:114)
at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:206)
at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:240)
at groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.java:124)
1 error
at org.codehaus.groovy.control.ErrorCollector.failIfErrors(ErrorCollector.java:292)
at org.codehaus.groovy.control.ErrorCollector.addException(ErrorCollector.java:140)
at org.codehaus.groovy.control.CompilationUnit$IPrimaryClassNodeOperation.doPhaseOperation(CompilationUnit.java:977)
at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:672)
at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:636)
at groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:392)
at groovy.lang.GroovyClassLoader.lambda$parseClass$3(GroovyClassLoader.java:335)
at org.codehaus.groovy.runtime.memoize.StampedCommonCache.compute(StampedCommonCache.java:163)
at org.codehaus.groovy.runtime.memoize.StampedCommonCache.getAndPut(StampedCommonCache.java:154)
at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:333)
at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:317)
at groovy.text.markup.MarkupTemplateEngine$TemplateGroovyClassLoader.parseClass(MarkupTemplateEngine.java:256)
at groovy.text.markup.MarkupTemplateEngine$MarkupTemplateMaker.<init>(MarkupTemplateEngine.java:229)
at groovy.text.markup.MarkupTemplateEngine.createTemplate(MarkupTemplateEngine.java:174)
at com.protocrawler.jtf.reporting.testexecution.html.TemplateManagementService.loadTemplate(TemplateManagementService.java:142)
at com.protocrawler.jtf.reporting.testexecution.html.TemplateManagementService.getTemplateFromInfo(TemplateManagementService.java:175)
at com.protocrawler.jtf.reporting.testexecution.html.TemplateManagementService.<init>(TemplateManagementService.java:111)
... 28 common frames omitted
Error occurred during execution: Unexpected error loading template PacketTrace
Does anyone have any suggestions of what the cause of these issues may be, or steps we could take to avoid the issues please?
If it's relevant here, the JRE we're currently using is Just J OpenJDK JRE 21.0.5, though we've tried other versions of OpenJDK including 17.x and still see the same issues.
Best Regards,
Rich.
Re: Intermittent Groovy stack overflow exceptions and hangs
Posted by Tommy <to...@natusoft.se>.
This part sounds potentially dangerous to me:
We develop an OSGI Eclipse E4 based application which is written in a combination of Java and Groovy. The application makes use of Groovy templates dynamically loaded at runtime (to facilitate providing HTML reports) and provides provision for the user to provide Groovy scripts which are parsed and run by a GroovyShell at runtime.
Is this user provided Groovy shell code somehow isolated from application code ? If not that sounds dangerous to me, and can cause unexpected side effects. Or are all users experienced developers with deep understanding of the application? Even if so I'm skeptical.
BR / Tommy
______________________
Tommy Svensson
tommy@natusoft.se
On 10 Mar 2025 at 08:59 +0100, Richard Harker <ri...@cytal.co.uk>, wrote:
> Hi All.
>
> We develop an OSGI Eclipse E4 based application which is written in a combination of Java and Groovy. The application makes use of Groovy templates dynamically loaded at runtime (to facilitate providing HTML reports) and provides provision for the user to provide Groovy scripts which are parsed and run by a GroovyShell at runtime.
>
> For some time now we’ve been seeing issues with intermittent stack overflow exceptions and intermittent hangs - both when the application loads the Groovy templates and when the application compiles the Groovy scripts.
>
> The stack overflow exceptions appear to be originating from Groovy and given the hangs appear to occur interchangeably for the stack overflow exceptions, our suspicion is that the hangs are potentially a different manifestation of the same underlying issue.
>
> We’ve been using Groovy for some years, and when we were on Groovy 2.5.x did not see these issues at all. We see them on both Groovy 3.x and on 4.x, with them seemingly being more frequent on Groovy 4.x.
>
> Has anyone else seen these types of issues? I’ve included two example stack traces below. I’ve truncated each stack trace in the middle of the repeating lines, so the email is not huge.
>
>
>
> Example stack trace 1 – from when we saw the Stack Overflow Exception with latest Groovy (4.0.26), when the Groovy Shell parses a Groovy script.
>
> !ENTRY com.protocrawler.jstdlib.core 4 0 2025-03-04 09:17:15.877
> !MESSAGE FrameworkEvent ERROR
> !STACK 0
> java.lang.StackOverflowError
> at java.base/java.lang.String.startsWith(String.java:2327)
> at java.base/sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:97)
> at java.base/sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:77)
> at java.base/sun.nio.fs.WindowsPath.parse(WindowsPath.java:92)
> at java.base/sun.nio.fs.WindowsFileSystem.getPath(WindowsFileSystem.java:231)
> at java.base/java.util.zip.ZipFile$Source.get(ZipFile.java:1445)
> at java.base/java.util.zip.ZipFile$CleanableResource.<init>(ZipFile.java:724)
> at java.base/java.util.zip.ZipFile.<init>(ZipFile.java:251)
> at java.base/java.util.zip.ZipFile.<init>(ZipFile.java:180)
> at java.base/java.util.zip.ZipFile.<init>(ZipFile.java:194)
> at org.eclipse.osgi.framework.util.SecureAction.getZipFile(SecureAction.java:353)
> at org.eclipse.osgi.storage.bundlefile.ZipBundleFile.doOpen(ZipBundleFile.java:51)
> at org.eclipse.osgi.storage.bundlefile.CloseableBundleFile.internalOpen(CloseableBundleFile.java:146)
> at org.eclipse.osgi.storage.bundlefile.CloseableBundleFile.lockOpen(CloseableBundleFile.java:83)
> at org.eclipse.osgi.storage.bundlefile.CloseableBundleFile.getEntry(CloseableBundleFile.java:285)
> at org.eclipse.osgi.storage.bundlefile.BundleFile.getResourceURL(BundleFile.java:147)
> at org.eclipse.osgi.internal.loader.classpath.ClasspathEntry.findResource(ClasspathEntry.java:228)
> at org.eclipse.osgi.internal.loader.classpath.ClasspathManager.findLocalResourceImpl(ClasspathManager.java:462)
> at org.eclipse.osgi.internal.loader.classpath.ClasspathManager.findLocalResourceImpl(ClasspathManager.java:441)
> at org.eclipse.osgi.internal.loader.classpath.ClasspathManager.findLocalResource(ClasspathManager.java:412)
> at org.eclipse.osgi.internal.loader.ModuleClassLoader.findLocalResource(ModuleClassLoader.java:340)
> at org.eclipse.osgi.internal.loader.BundleLoader.findLocalResource(BundleLoader.java:952)
> at org.eclipse.osgi.internal.loader.sources.SingleSourcePackage.getResource(SingleSourcePackage.java:46)
> at org.eclipse.osgi.internal.loader.BundleLoader.findResource(BundleLoader.java:710)
> at org.eclipse.osgi.internal.loader.ModuleClassLoader.getResource(ModuleClassLoader.java:212)
> at java.base/java.lang.ClassLoader.getResource(ClassLoader.java:1413)
> at org.codehaus.groovy.control.ClassNodeResolver.findDecompiled(ClassNodeResolver.java:252)
> at org.codehaus.groovy.control.ClassNodeResolver.tryAsLoaderClassOrScript(ClassNodeResolver.java:193)
> at org.codehaus.groovy.control.ClassNodeResolver.findClassNode(ClassNodeResolver.java:175)
> at org.codehaus.groovy.control.ClassNodeResolver.resolveName(ClassNodeResolver.java:129)
> at org.codehaus.groovy.ast.decompiled.AsmReferenceResolver.resolveClassNullable(AsmReferenceResolver.java:57)
> at org.codehaus.groovy.ast.decompiled.AsmReferenceResolver.resolveClass(AsmReferenceResolver.java:44)
> at org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:113)
> at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:206)
> at groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.java:124)
> at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSignature(ClassSignatureParser.java:111)
> at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass(ClassSignatureParser.java:35)
> at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(DecompiledClassNode.java:189)
> at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTypes(DecompiledClassNode.java:148)
> at org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:125)
> at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:206)
> at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:240)
> at groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.java:124)
> at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSignature(ClassSignatureParser.java:111)
> at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass(ClassSignatureParser.java:35)
> at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(DecompiledClassNode.java:189)
> at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTypes(DecompiledClassNode.java:148)
> at org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:125)
> at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:206)
> at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:240)
> at groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.java:124)
> at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSignature(ClassSignatureParser.java:111)
> at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass(ClassSignatureParser.java:35)
> at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(DecompiledClassNode.java:189)
> at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTypes(DecompiledClassNode.java:148)
> at org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:125)
> at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:206)
> at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:240)
> at groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.java:124)
>
> <<removed ~900 lines to make the email shorter>>
>
> at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSignature(ClassSignatureParser.java:111)
> at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass(ClassSignatureParser.java:35)
> at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(DecompiledClassNode.java:189)
> at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTypes(DecompiledClassNode.java:148)
> at org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:125)
> at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:206)
> at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:240)
> at groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.java:124)
> at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSignature(ClassSignatureParser.java:111)
> at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass(ClassSignatureParser.java:35)
> at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(DecompiledClassNode.java:189)
> at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTypes(DecompiledClassNode.java:148)
> at org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:125)
> at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:206)
> at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:240)
> at groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.java:124)
> at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSignature(ClassSignatureParser.java:111)
> at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass(ClassSignatureParser.java:35)
> at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(DecompiledClassNode.java:189)
> at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTypes(DecompiledClassNode.java:148)
> at org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:125)
>
>
>
>
> Example 2 – The stack overflow seen with Groovy 3.0.23 when parsing one of our TPL template files:
>
> OpenJDK 64-Bit Server VM warning: Potentially dangerous stack overflow in ReservedStackAccess annotated method java.util.concurrent.locks.ReentrantReadWriteLock$Sync.tryAcquireShared(I)I [1]
> [ERROR] Unhandled HTML reporter exception
> java.lang.IllegalStateException: Unexpected error loading template PacketTrace
> at com.protocrawler.jtf.reporting.testexecution.html.TemplateManagementService.<init>(TemplateManagementService.java:115)
> at com.protocrawler.jtf.reporting.testexecution.html.TemplateManagementService.getTemplateManagementService(TemplateManagementService.java:51)
> at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:318)
> at com.protocrawler.jtf.reporting.testexecution.html.MultiFileTestExecutionHTMLReporter.initialSetup(MultiFileTestExecutionHTMLReporter.groovy:173)
> at com.protocrawler.pts.core.jtf.analysis.reporting.html.HTMLAnalysisReporter.super$2$initialSetup(HTMLAnalysisReporter.groovy)
> at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
> at java.base/java.lang.reflect.Method.invoke(Method.java:580)
> at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:107)
> at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:323)
> at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1254)
> at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.invokeMethodOnSuperN(ScriptBytecodeAdapter.java:144)
> at com.protocrawler.pts.core.jtf.analysis.reporting.html.HTMLAnalysisReporter.initialSetup(HTMLAnalysisReporter.groovy:94)
> at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:318)
> at com.protocrawler.jtf.reporting.testexecution.html.MultiFileTestExecutionHTMLReporter.generateReport(MultiFileTestExecutionHTMLReporter.groovy:98)
> at com.protocrawler.jtf.reporting.testexecution.html.cmdln.HTMTestExecutionReport.performCommand(HTMTestExecutionReport.java:219)
> at com.protocrawler.jtf.reporting.testexecution.html.cmdln.HTMTestExecutionReport.performCommand(HTMTestExecutionReport.java:36)
> at com.protocrawler.jstdlib.emfcore.cmdline.EMFSettingsCommandLineCommand.performCommand(EMFSettingsCommandLineCommand.java:111)
> at com.protocrawler.jstdlib.applications.cmdln.DefaultEclipseRCPCommandLineApplication.start(DefaultEclipseRCPCommandLineApplication.java:126)
> at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:208)
> at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:143)
> at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:109)
> at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:439)
> at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:271)
> at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
> at java.base/java.lang.reflect.Method.invoke(Method.java:580)
> at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:668)
> at org.eclipse.equinox.launcher.Main.basicRun(Main.java:605)
> at org.eclipse.equinox.launcher.Main.run(Main.java:1481)
> at org.eclipse.equinox.launcher.Main.main(Main.java:1454)
> Caused by: org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
> General error during canonicalization: Requesting upgrade to write lock.
>
> java.lang.IllegalMonitorStateException: Requesting upgrade to write lock.
> at org.eclipse.osgi.container.ModuleDatabase.writeLock(ModuleDatabase.java:840)
> at org.eclipse.osgi.container.ModuleContainer.applyDelta(ModuleContainer.java:984)
> at org.eclipse.osgi.container.ModuleContainer.resolveDynamic(ModuleContainer.java:835)
> at org.eclipse.osgi.internal.loader.BundleLoader.findDynamicSource(BundleLoader.java:1269)
> at org.eclipse.osgi.internal.loader.BundleLoader.findResource(BundleLoader.java:729)
> at org.eclipse.osgi.internal.loader.ModuleClassLoader.getResource(ModuleClassLoader.java:212)
> at java.base/java.lang.ClassLoader.getResource(ClassLoader.java:1413)
> at org.codehaus.groovy.control.ClassNodeResolver.findDecompiled(ClassNodeResolver.java:248)
> at org.codehaus.groovy.control.ClassNodeResolver.tryAsLoaderClassOrScript(ClassNodeResolver.java:189)
> at org.codehaus.groovy.control.ClassNodeResolver.findClassNode(ClassNodeResolver.java:169)
> at org.codehaus.groovy.control.ClassNodeResolver.resolveName(ClassNodeResolver.java:125)
> at org.codehaus.groovy.ast.decompiled.AsmReferenceResolver.resolveClassNullable(AsmReferenceResolver.java:57)
> at org.codehaus.groovy.ast.decompiled.AsmReferenceResolver.resolveClass(AsmReferenceResolver.java:44)
> at org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:102)
> at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:206)
> at groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.java:124)
> at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSignature(ClassSignatureParser.java:74)
> at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass(ClassSignatureParser.java:32)
> at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(DecompiledClassNode.java:163)
> at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTypes(DecompiledClassNode.java:128)
> at org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:114)
> at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:206)
> at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:240)
> at groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.java:124)
> at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSignature(ClassSignatureParser.java:74)
> at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass(ClassSignatureParser.java:32)
> at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(DecompiledClassNode.java:163)
> at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTypes(DecompiledClassNode.java:128)
> at org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:114)
> at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:206)
> at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:240)
> at groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.java:124)
> at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSignature(ClassSignatureParser.java:74)
> at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass(ClassSignatureParser.java:32)
> at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(DecompiledClassNode.java:163)
> at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTypes(DecompiledClassNode.java:128)
> at org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:114)
> at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:206)
> at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:240)
> at groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.java:124)
> at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSignature(ClassSignatureParser.java:74)
> at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass(ClassSignatureParser.java:32)
> at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(DecompiledClassNode.java:163)
> at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTypes(DecompiledClassNode.java:128)
> at org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:114)
> at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:206)
> at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:240)
> at groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.java:124)
>
> <<removed ~900 lines to make the email shorter>>
>
> at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSignature(ClassSignatureParser.java:74)
> at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass(ClassSignatureParser.java:32)
> at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(DecompiledClassNode.java:163)
> at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTypes(DecompiledClassNode.java:128)
> at org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:114)
> at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:206)
> at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:240)
> at groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.java:124)
> at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSignature(ClassSignatureParser.java:74)
> at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass(ClassSignatureParser.java:32)
> at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(DecompiledClassNode.java:163)
> at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTypes(DecompiledClassNode.java:128)
> at org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:114)
> at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:206)
> at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:240)
> at groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.java:124)
> at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSignature(ClassSignatureParser.java:74)
> at org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass(ClassSignatureParser.java:32)
> at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(DecompiledClassNode.java:163)
> at org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTypes(DecompiledClassNode.java:128)
> at org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:114)
> at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:206)
> at groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:240)
> at groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.java:124)
>
> 1 error
>
> at org.codehaus.groovy.control.ErrorCollector.failIfErrors(ErrorCollector.java:292)
> at org.codehaus.groovy.control.ErrorCollector.addException(ErrorCollector.java:140)
> at org.codehaus.groovy.control.CompilationUnit$IPrimaryClassNodeOperation.doPhaseOperation(CompilationUnit.java:977)
> at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:672)
> at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:636)
> at groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:392)
> at groovy.lang.GroovyClassLoader.lambda$parseClass$3(GroovyClassLoader.java:335)
> at org.codehaus.groovy.runtime.memoize.StampedCommonCache.compute(StampedCommonCache.java:163)
> at org.codehaus.groovy.runtime.memoize.StampedCommonCache.getAndPut(StampedCommonCache.java:154)
> at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:333)
> at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:317)
> at groovy.text.markup.MarkupTemplateEngine$TemplateGroovyClassLoader.parseClass(MarkupTemplateEngine.java:256)
> at groovy.text.markup.MarkupTemplateEngine$MarkupTemplateMaker.<init>(MarkupTemplateEngine.java:229)
> at groovy.text.markup.MarkupTemplateEngine.createTemplate(MarkupTemplateEngine.java:174)
> at com.protocrawler.jtf.reporting.testexecution.html.TemplateManagementService.loadTemplate(TemplateManagementService.java:142)
> at com.protocrawler.jtf.reporting.testexecution.html.TemplateManagementService.getTemplateFromInfo(TemplateManagementService.java:175)
> at com.protocrawler.jtf.reporting.testexecution.html.TemplateManagementService.<init>(TemplateManagementService.java:111)
> ... 28 common frames omitted
> Error occurred during execution: Unexpected error loading template PacketTrace
>
> Does anyone have any suggestions of what the cause of these issues may be, or steps we could take to avoid the issues please?
>
>
> If it’s relevant here, the JRE we’re currently using is Just J OpenJDK JRE 21.0.5, though we’ve tried other versions of OpenJDK including 17.x and still see the same issues.
>
> Best Regards,
>
> Rich.
>