Bug 475152 - infinite loop during build time weaving when more than 2 aspects in hierarchy at org.aspectj.weaver.bcel.BcelAdvice.canInline
Summary: infinite loop during build time weaving when more than 2 aspects in hierarchy...
Status: RESOLVED FIXED
Alias: None
Product: AspectJ
Classification: Tools
Component: Compiler (show other bugs)
Version: 1.8.6   Edit
Hardware: PC Linux
: P3 critical (vote)
Target Milestone: 1.8.7   Edit
Assignee: aspectj inbox CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2015-08-17 09:20 EDT by Lukasz Krzyzak CLA
Modified: 2015-09-02 12:50 EDT (History)
2 users (show)

See Also:


Attachments
proposed patch (1.50 KB, text/plain)
2015-08-17 09:20 EDT, Lukasz Krzyzak CLA
no flags Details
test case (1.94 KB, application/x-compressed-tar)
2015-08-17 09:23 EDT, Lukasz Krzyzak CLA
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
Description Lukasz Krzyzak CLA 2015-08-17 09:20:55 EDT
Created attachment 255894 [details]
proposed patch

When weaving aspect, which has two base aspects, code from a1cfe944a602101d144c8efd7df217ab20e4b9ee goes into an infinite loop.

There isn't assignment of boType inside while loop, so if lazyMethodGen doesn't find matching method in direct base class, it stays forewer in while loop, stack trace from build thread:

"main" #1 prio=5 os_prio=0 tid=0x00007fd6c4008800 nid=0x9e8 runnable [0x00007fd6ca11d000]
   java.lang.Thread.State: RUNNABLE
        at org.aspectj.weaver.bcel.BcelAdvice.canInline(BcelAdvice.java:257)
        at org.aspectj.weaver.bcel.BcelAdvice.implementOn(BcelAdvice.java:378)
        at org.aspectj.weaver.Shadow.implementMungers(Shadow.java:632)
        at org.aspectj.weaver.Shadow.implement(Shadow.java:547)
        at org.aspectj.weaver.bcel.BcelClassWeaver.implement(BcelClassWeaver.java:3335)
        at org.aspectj.weaver.bcel.BcelClassWeaver.weave(BcelClassWeaver.java:496)
        at org.aspectj.weaver.bcel.BcelClassWeaver.weave(BcelClassWeaver.java:100)
        at org.aspectj.weaver.bcel.BcelWeaver.weave(BcelWeaver.java:1689)
        at org.aspectj.weaver.bcel.BcelWeaver.weaveWithoutDump(BcelWeaver.java:1633)
        at org.aspectj.weaver.bcel.BcelWeaver.weaveAndNotify(BcelWeaver.java:1398)
        at org.aspectj.weaver.bcel.BcelWeaver.weave(BcelWeaver.java:1184)
        at org.aspectj.ajdt.internal.compiler.AjPipeliningCompilerAdapter.weaveQueuedEntries(AjPipeliningCompilerAdapter.java:514)
        at org.aspectj.ajdt.internal.compiler.AjPipeliningCompilerAdapter.queueForWeaving(AjPipeliningCompilerAdapter.java:447)
        at org.aspectj.ajdt.internal.compiler.AjPipeliningCompilerAdapter.afterProcessing(AjPipeliningCompilerAdapter.java:432)
        at org.aspectj.ajdt.internal.compiler.CompilerAdapter.ajc$after$org_aspectj_ajdt_internal_compiler_CompilerAdapter$5$6b855184(CompilerAdapter.aj:103)
        at org.aspectj.org.eclipse.jdt.internal.compiler.Compiler.process(Compiler.java:822)
        at org.aspectj.org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:480)
        at org.aspectj.org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:420)
        at org.aspectj.ajdt.internal.core.builder.AjBuildManager.performCompilation(AjBuildManager.java:1036)
        at org.aspectj.ajdt.internal.core.builder.AjBuildManager.performBuild(AjBuildManager.java:272)
        at org.aspectj.ajdt.internal.core.builder.AjBuildManager.batchBuild(AjBuildManager.java:185)
        at org.aspectj.ajdt.ajc.AjdtCommand.doCommand(AjdtCommand.java:112)
        at org.aspectj.ajdt.ajc.AjdtCommand.runCommand(AjdtCommand.java:60)
        at org.aspectj.tools.ajc.Main.run(Main.java:371)
        at org.aspectj.tools.ajc.Main.runMain(Main.java:248)
        at org.codehaus.mojo.aspectj.AbstractAjcCompiler.execute(AbstractAjcCompiler.java:524)

I'm attaching simple maven test case and patch working for me.
Comment 1 Lukasz Krzyzak CLA 2015-08-17 09:23:20 EDT
Created attachment 255895 [details]
test case
Comment 2 Andrew Clement CLA 2015-09-02 12:50:59 EDT
All fixed up. Thanks so much for taking the time to produce a minimal testcase, those are invaluable.