Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.

Bug 549657

Summary: Eclipse pins CPU or hangs accessing the jOOL package
Product: [Eclipse Project] JDT Reporter: Nathaniel Mishkin <mishkin>
Component: CoreAssignee: JDT-Core-Inbox <jdt-core-inbox>
Status: CLOSED DUPLICATE QA Contact:
Severity: critical    
Priority: P3 CC: loskutov, stephan.herrmann
Version: 4.11   
Target Milestone: ---   
Hardware: All   
OS: All   
Whiteboard:
Attachments:
Description Flags
jstack output for a CPU-bound Eclipse 4.11
none
jstack output for a CPU-bound Eclipse 4.13M1
none
jstack output for a CPU-bound Eclipse I20190729-1800 none

Description Nathaniel Mishkin CLA 2019-07-30 08:55:28 EDT
This is a problem I've seen only when working with the jOOL library (https://github.com/jOOQ/jOOL). I use this library in binary form in a large set of projects I work on. The library dependency is established by Gradle / Buildship but (see below) I believe that's an irrelevant detail. I first noticed the problem when I used "Open Type" to access the source file from one of the library's classes ("Seq"). The class shows up in the "Open Type" dialog but as soon as I close the dialog, Eclipse hangs--all I see is the busy cursor and I have to force-kill Eclipse.

To make a reproducible case, in an empty workspace I imported the jOOL library source code itself. (I imported the path "jOOL/jOOL-java-8" using m2e.) In this case the project gets created but the builder never completes (it gets stuck at "Building workspace (54% complete)" forever with one or more CPUs pinned.
Comment 1 Andrey Loskutov CLA 2019-07-30 11:54:14 EDT
Nathaniel, can you please create jstack dump from "hanging" Eclipse and attach it here?

Which exact Eclipse version are you using? Can you also try with latest 4.13 nightly build?
Comment 2 Nathaniel Mishkin CLA 2019-07-30 15:03:28 EDT
Created attachment 279440 [details]
jstack output for a CPU-bound Eclipse 4.11
Comment 3 Andrey Loskutov CLA 2019-07-30 15:09:31 EDT
(In reply to Nathaniel Mishkin from comment #2)
> Created attachment 279440 [details]
> jstack output for a CPU-bound Eclipse 4.11

Looks like SWT problem. Please try 4.13 nightly build, I believe we had some fix es for Mac hangs in UI.
Comment 4 Nathaniel Mishkin CLA 2019-07-30 15:16:29 EDT
Created attachment 279441 [details]
jstack output for a CPU-bound Eclipse 4.13M1

Same behavior with 4.13M1.
Comment 5 Andrey Loskutov CLA 2019-07-30 15:23:43 EDT
Sorry, 

was confused by the mac part of tje stack. 

Yep, this is JDT. We have 3 suspicious threads running. 

Would be great if you could isolate a simple reproducer out of the library.


"Java indexing" #45 daemon prio=4 os_prio=31 tid=0x00007fe8d2c34000 nid=0xde0b runnable  [0x0000700010fa5000]
   java.lang.Thread.State: RUNNABLE
	at org.eclipse.jdt.internal.compiler.lookup.BoundSet.combineEqualSupers(BoundSet.java:818)
	at org.eclipse.jdt.internal.compiler.lookup.BoundSet.incorporate(BoundSet.java:570)
	at org.eclipse.jdt.internal.compiler.lookup.BoundSet.incorporate(BoundSet.java:490)
	at org.eclipse.jdt.internal.compiler.lookup.InferenceContext18.resolve(InferenceContext18.java:1190)
	at org.eclipse.jdt.internal.compiler.lookup.InferenceContext18.solve(InferenceContext18.java:1028)
	at org.eclipse.jdt.internal.compiler.lookup.InferenceContext18.solve(InferenceContext18.java:1047)
	at org.eclipse.jdt.internal.compiler.lookup.InferenceContext18.inferInvocationType(InferenceContext18.java:473)
	at org.eclipse.jdt.internal.compiler.lookup.ParameterizedGenericMethodBinding.computeCompatibleMethod18(ParameterizedGenericMethodBinding.java:271)
	at org.eclipse.jdt.internal.compiler.lookup.ParameterizedGenericMethodBinding.computeCompatibleMethod(ParameterizedGenericMethodBinding.java:92)
	at org.eclipse.jdt.internal.compiler.lookup.Scope.computeCompatibleMethod(Scope.java:837)
	at org.eclipse.jdt.internal.compiler.lookup.Scope.computeCompatibleMethod(Scope.java:794)
	at org.eclipse.jdt.internal.compiler.lookup.Scope.findMethod0(Scope.java:1750)
	at org.eclipse.jdt.internal.compiler.lookup.Scope.findMethod(Scope.java:1651)
	at org.eclipse.jdt.internal.compiler.lookup.Scope.getMethod(Scope.java:2934)
	at org.eclipse.jdt.internal.compiler.ast.MessageSend.findMethodBinding(MessageSend.java:953)
	at org.eclipse.jdt.internal.compiler.ast.MessageSend.resolveType(MessageSend.java:774)
	at org.eclipse.jdt.internal.compiler.ast.MessageSend.resolveType(MessageSend.java:678)
	at org.eclipse.jdt.internal.compiler.ast.ReturnStatement.resolve(ReturnStatement.java:326)
	at org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration.resolveStatements(AbstractMethodDeclaration.java:641)
	at org.eclipse.jdt.internal.compiler.ast.MethodDeclaration.resolveStatements(MethodDeclaration.java:316)
	at org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration.resolve(AbstractMethodDeclaration.java:551)
	at org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.resolve(TypeDeclaration.java:1280)
	at org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.resolve(TypeDeclaration.java:1405)
	at org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration.resolve(CompilationUnitDeclaration.java:652)
	at org.eclipse.jdt.internal.core.search.indexing.SourceIndexer.resolveDocument(SourceIndexer.java:175)
	at org.eclipse.jdt.internal.core.search.JavaSearchParticipant.resolveDocument(JavaSearchParticipant.java:94)
	at org.eclipse.jdt.internal.core.search.indexing.IndexManager.indexResolvedDocument(IndexManager.java:551)
	at org.eclipse.jdt.internal.core.search.indexing.IndexManager$1.execute(IndexManager.java:1080)
	at org.eclipse.jdt.internal.core.search.processing.JobManager.run(JobManager.java:401)
	at java.lang.Thread.run(java.base@10.0.1/Thread.java:844)



"Worker-6: Building workspace" #51 prio=5 os_prio=31 tid=0x00007fe861919000 nid=0x13707 in Object.wait()  [0x0000700011a44000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
	at java.lang.Object.wait(java.base@10.0.1/Native Method)
	- waiting on <no object reference available>
	at org.eclipse.jdt.internal.compiler.ProcessTaskManager.removeNextUnit(ProcessTaskManager.java:92)
	- waiting to re-lock in wait() <0x00000000c38867d0> (a org.eclipse.jdt.internal.compiler.ProcessTaskManager)
	at org.eclipse.jdt.internal.compiler.Compiler.processCompiledUnits(Compiler.java:607)
	at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:475)
	at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:426)
	at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:386)
	at org.eclipse.jdt.internal.core.builder.BatchImageBuilder.compile(BatchImageBuilder.java:214)
	at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:318)
	at org.eclipse.jdt.internal.core.builder.BatchImageBuilder.build(BatchImageBuilder.java:79)
	at org.eclipse.jdt.internal.core.builder.JavaBuilder.buildAll(JavaBuilder.java:262)
	at org.eclipse.jdt.internal.core.builder.JavaBuilder.build(JavaBuilder.java:180)
	at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:833)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45)
	at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:220)
	at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:263)
	at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:316)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45)
	at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:319)
	at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:371)
	at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:392)
	at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:154)
	at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:244)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)


"Compiler Processing Task" #67 daemon prio=5 os_prio=31 tid=0x00007fe863294000 nid=0x1ce07 runnable  [0x00007000123ea000]
   java.lang.Thread.State: RUNNABLE
	at org.eclipse.jdt.internal.compiler.lookup.ConstraintTypeFormula.reduceTypeEquality(ConstraintTypeFormula.java:189)
	at org.eclipse.jdt.internal.compiler.lookup.ConstraintTypeFormula.reduce(ConstraintTypeFormula.java:108)
	at org.eclipse.jdt.internal.compiler.lookup.BoundSet.reduceOneConstraint(BoundSet.java:869)
	at org.eclipse.jdt.internal.compiler.lookup.BoundSet.reduceOneConstraint(BoundSet.java:885)
	at org.eclipse.jdt.internal.compiler.lookup.BoundSet.incorporate(BoundSet.java:589)
	at org.eclipse.jdt.internal.compiler.lookup.BoundSet.incorporate(BoundSet.java:490)
	at org.eclipse.jdt.internal.compiler.lookup.InferenceContext18.solve(InferenceContext18.java:1023)
	at org.eclipse.jdt.internal.compiler.lookup.ParameterizedGenericMethodBinding.computeCompatibleMethod18(ParameterizedGenericMethodBinding.java:249)
	at org.eclipse.jdt.internal.compiler.lookup.ParameterizedGenericMethodBinding.computeCompatibleMethod(ParameterizedGenericMethodBinding.java:92)
	at org.eclipse.jdt.internal.compiler.lookup.Scope.computeCompatibleMethod(Scope.java:837)
	at org.eclipse.jdt.internal.compiler.lookup.Scope.computeCompatibleMethod(Scope.java:794)
	at org.eclipse.jdt.internal.compiler.lookup.Scope.findMethod0(Scope.java:1750)
	at org.eclipse.jdt.internal.compiler.lookup.Scope.findMethod(Scope.java:1651)
	at org.eclipse.jdt.internal.compiler.lookup.Scope.getImplicitMethod(Scope.java:2618)
	at org.eclipse.jdt.internal.compiler.ast.MessageSend.findMethodBinding(MessageSend.java:952)
	at org.eclipse.jdt.internal.compiler.ast.MessageSend.resolveType(MessageSend.java:774)
	at org.eclipse.jdt.internal.compiler.ast.ReturnStatement.resolve(ReturnStatement.java:326)
	at org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration.resolveStatements(AbstractMethodDeclaration.java:641)
	at org.eclipse.jdt.internal.compiler.ast.MethodDeclaration.resolveStatements(MethodDeclaration.java:316)
	at org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration.resolve(AbstractMethodDeclaration.java:551)
	at org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.resolve(TypeDeclaration.java:1280)
	at org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.resolve(TypeDeclaration.java:1405)
	at org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration.resolve(CompilationUnitDeclaration.java:652)
	at org.eclipse.jdt.internal.compiler.Compiler.process(Compiler.java:886)
	at org.eclipse.jdt.internal.compiler.ProcessTaskManager.run(ProcessTaskManager.java:145)
	at java.lang.Thread.run(java.base@10.0.1/Thread.java:844)
Comment 6 Nathaniel Mishkin CLA 2019-07-30 15:28:45 EDT
Created attachment 279442 [details]
jstack output for a CPU-bound Eclipse I20190729-1800

Same behavior with the current nightly build.
Comment 7 Nathaniel Mishkin CLA 2019-07-30 17:30:20 EDT
> Would be great if you could isolate a simple reproducer out of the library

I'm not sure I'm going to have time to do that right now. I'll try to get to it. In the meantime I'll just say it's really pretty easy to set things up. Just clone the jOOL repo and import the project into Eclipse.
Comment 8 Andrey Loskutov CLA 2019-07-30 18:02:24 EDT
(In reply to Nathaniel Mishkin from comment #7)
> > Would be great if you could isolate a simple reproducer out of the library
> 
> I'm not sure I'm going to have time to do that right now. I'll try to get to
> it. In the meantime I'll just say it's really pretty easy to set things up.
> Just clone the jOOL repo and import the project into Eclipse.

Just hoped you would do our work ;)
Comment 9 Stephan Herrmann CLA 2019-07-31 04:46:13 EDT
With jOOL in the loop and BoundSet.incorporate in the stack this looks like bug 543480

*** This bug has been marked as a duplicate of bug 543480 ***