Bug 62453 - Large File: Java builder not reacting on cancel
Summary: Large File: Java builder not reacting on cancel
Status: VERIFIED FIXED
Alias: None
Product: JDT
Classification: Eclipse Project
Component: Core (show other bugs)
Version: 3.0   Edit
Hardware: PC Windows XP
: P3 normal (vote)
Target Milestone: 3.0 RC1   Edit
Assignee: David Audel CLA
QA Contact:
URL:
Whiteboard:
Keywords: performance
: 63432 (view as bug list)
Depends on:
Blocks:
 
Reported: 2004-05-17 06:30 EDT by Dani Megert CLA
Modified: 2004-06-01 05:01 EDT (History)
1 user (show)

See Also:


Attachments
diagnose performance improvment (2.77 KB, text/plain)
2004-05-28 09:45 EDT, David Audel CLA
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
Description Dani Megert CLA 2004-05-17 06:30:24 EDT
I200405131600

I was trying to reproduce bug 41830. To do this I copied a large zip into my
workspace and then renamed it to have a .java ending. Since auto-build is on the
builder tried to compile this file (which of course has no valid Java source). I
disabled auto-build and cancelled the job but the Java still builder uses 100%
CPU after 5 minutes.

Here's the stack dump:
Full thread dump Java HotSpot(TM) Client VM (1.4.2_03-b02 mixed mode):

"Worker-63" prio=5 tid=0x03e63698 nid=0x98c in Object.wait() [5a8f000..5a8fd8c]
        at java.lang.Object.wait(Native Method)
        - waiting on <0x1d321940> (a org.eclipse.core.internal.jobs.Semaphore)
        at org.eclipse.core.internal.jobs.Semaphore.acquire(Semaphore.java:38)
        - locked <0x1d321940> (a org.eclipse.core.internal.jobs.Semaphore)
        at
org.eclipse.core.internal.jobs.OrderedLock.doAcquire(OrderedLock.java:171)
        at org.eclipse.core.internal.jobs.OrderedLock.acquire(OrderedLock.java:105)
        at org.eclipse.core.internal.jobs.OrderedLock.acquire(OrderedLock.java:79)
        at
org.eclipse.core.internal.resources.WorkManager.checkIn(WorkManager.java:96)
        at
org.eclipse.core.internal.resources.Workspace.prepareOperation(Workspace.java:1629)
        at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1669)
        at
org.eclipse.core.internal.events.NotificationManager$NotifyJob.run(NotificationManager.java:38)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:66)

"Worker-62" prio=5 tid=0x03ffc090 nid=0xab8 in Object.wait() [3d9f000..3d9fd8c]
        at java.lang.Object.wait(Native Method)
        - waiting on <0x11d1c030> (a org.eclipse.core.internal.jobs.WorkerPool)
        at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:209)
        - locked <0x11d1c030> (a org.eclipse.core.internal.jobs.WorkerPool)
        at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:236)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:59)

"Worker-61" prio=5 tid=0x04741d80 nid=0x558 runnable [38ef000..38efd8c]
        at
org.eclipse.jdt.internal.compiler.parser.diagnose.DiagnoseParser.scopeTrialCheck(DiagnoseParser.java:1346)
        at
org.eclipse.jdt.internal.compiler.parser.diagnose.DiagnoseParser.scopeTrial(DiagnoseParser.java:1309)
        at
org.eclipse.jdt.internal.compiler.parser.diagnose.DiagnoseParser.secondaryPhase(DiagnoseParser.java:1663)
        at
org.eclipse.jdt.internal.compiler.parser.diagnose.DiagnoseParser.errorRecovery(DiagnoseParser.java:476)
        at
org.eclipse.jdt.internal.compiler.parser.diagnose.DiagnoseParser.diagnoseParse(DiagnoseParser.java:358)
        at
org.eclipse.jdt.internal.compiler.parser.Parser.reportSyntaxErrors(Parser.java:5405)
        at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:5384)
        at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:5708)
        at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:5673)
        at
org.eclipse.jdt.internal.compiler.parser.Parser.dietParse(Parser.java:4393)
        at
org.eclipse.jdt.internal.compiler.Compiler.beginToCompile(Compiler.java:293)
        at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:319)
        at
org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:203)
        at
org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:153)
        at
org.eclipse.jdt.internal.core.builder.IncrementalImageBuilder.build(IncrementalImageBuilder.java:113)
        at
org.eclipse.jdt.internal.core.builder.JavaBuilder.buildDeltas(JavaBuilder.java:224)
        at
org.eclipse.jdt.internal.core.builder.JavaBuilder.build(JavaBuilder.java:152)
        at
org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:532)
        at
org.eclipse.core.internal.runtime.InternalPlatform.run(InternalPlatform.java:607)
        at org.eclipse.core.runtime.Platform.run(Platform.java:668)
        at
org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:148)
        at
org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:225)
        at
org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:178)
        at
org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:205)
        at
org.eclipse.core.internal.runtime.InternalPlatform.run(InternalPlatform.java:607)
        at org.eclipse.core.runtime.Platform.run(Platform.java:668)
        at
org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:208)
        at
org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:244)
        at
org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:273)
        at
org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:150)
        at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:196)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:66)

"Thread-5" prio=7 tid=0x03e98130 nid=0xb40 runnable [3c1f000..3c1fd8c]
        at java.net.SocketInputStream.socketRead0(Native Method)
        at java.net.SocketInputStream.read(SocketInputStream.java:129)
        at com.jcraft.jsch.IO.getByte(Unknown Source)
        at com.jcraft.jsch.Session.read(Unknown Source)
        at com.jcraft.jsch.Session.run(Unknown Source)
        at java.lang.Thread.run(Thread.java:534)

"Java indexing" daemon prio=4 tid=0x030cc2e0 nid=0xc64 in Object.wait()
[386f000..386fd8c]
        at java.lang.Object.wait(Native Method)
        - waiting on <0x12784be0> (a
org.eclipse.jdt.internal.core.search.indexing.IndexManager)
        at java.lang.Object.wait(Object.java:429)
        at
org.eclipse.jdt.internal.core.search.processing.JobManager.run(JobManager.java:344)
        - locked <0x12784be0> (a
org.eclipse.jdt.internal.core.search.indexing.IndexManager)
        at java.lang.Thread.run(Thread.java:534)

"Thread-1" prio=7 tid=0x02f45d68 nid=0xe88 in Object.wait() [37cf000..37cfd8c]
        at java.lang.Object.wait(Native Method)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:111)
        - locked <0x127260e8> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:127)
        at
org.eclipse.jface.action.ActionContributionItem$ImageCache$ReferenceCleanerThread.run(ActionContributionItem.java:196)

"Thread-0" prio=7 tid=0x02ee19f8 nid=0xe84 in Object.wait() [378f000..378fd8c]
        at java.lang.Object.wait(Native Method)
        - waiting on <0x12726158> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:111)
        - locked <0x12726158> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:127)
        at
org.eclipse.jface.action.ActionContributionItem$ImageCache$ReferenceCleanerThread.run(ActionContributionItem.java:196)

"Start Level Event Dispatcher" daemon prio=5 tid=0x02de09b8 nid=0xdd8 in
Object.wait() [302f000..302fd8c]
        at java.lang.Object.wait(Native Method)
        - waiting on <0x11b6de18> (a
org.eclipse.osgi.framework.eventmgr.EventThread)
        at java.lang.Object.wait(Object.java:429)
        at
org.eclipse.osgi.framework.eventmgr.EventThread.getNextEvent(EventThread.java:149)
        - locked <0x11b6de18> (a org.eclipse.osgi.framework.eventmgr.EventThread)
        at org.eclipse.osgi.framework.eventmgr.EventThread.run(EventThread.java:107)

"Framework Event Dispatcher" daemon prio=5 tid=0x00a51ad0 nid=0xdd4 in
Object.wait() [2fef000..2fefd8c]
        at java.lang.Object.wait(Native Method)
        - waiting on <0x11b6e018> (a
org.eclipse.osgi.framework.eventmgr.EventThread)
        at java.lang.Object.wait(Object.java:429)
        at
org.eclipse.osgi.framework.eventmgr.EventThread.getNextEvent(EventThread.java:149)
        - locked <0x11b6e018> (a org.eclipse.osgi.framework.eventmgr.EventThread)
        at org.eclipse.osgi.framework.eventmgr.EventThread.run(EventThread.java:107)

"Signal Dispatcher" daemon prio=10 tid=0x0003f2e0 nid=0x130 waiting on condition
[0..0]

"Finalizer" daemon prio=9 tid=0x00a01b28 nid=0xee0 in Object.wait()
[2caf000..2cafd8c]
        at java.lang.Object.wait(Native Method)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:111)
        - locked <0x11b0f910> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:127)
        at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:159)

"Reference Handler" daemon prio=10 tid=0x009c20a8 nid=0xecc in Object.wait()
[2c6f000..2c6fd8c]
        at java.lang.Object.wait(Native Method)
        at java.lang.Object.wait(Object.java:429)
        at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:115)
        - locked <0x11b0f6c8> (a java.lang.ref.Reference$Lock)

"main" prio=7 tid=0x000352c0 nid=0xec4 in Object.wait() [7f000..7fc3c]
        at java.lang.Object.wait(Native Method)
        - waiting on <0x228aaeb0> (a org.eclipse.core.internal.jobs.ThreadJob)
        at org.eclipse.core.internal.jobs.ThreadJob.joinRun(ThreadJob.java:159)
        - locked <0x228aaeb0> (a org.eclipse.core.internal.jobs.ThreadJob)
        at org.eclipse.core.internal.jobs.ImplicitJobs.begin(ImplicitJobs.java:87)
        at
org.eclipse.core.internal.jobs.ImplicitJobs.suspend(ImplicitJobs.java:189)
        at org.eclipse.core.internal.jobs.JobManager.suspend(JobManager.java:994)
        at
org.eclipse.ltk.ui.refactoring.RefactoringWizardOpenOperation.run(RefactoringWizardOpenOperation.java:108)
        at
org.eclipse.jdt.internal.ui.refactoring.actions.RefactoringStarter.activate(RefactoringStarter.java:40)
        at
org.eclipse.jdt.internal.ui.refactoring.UserInterfaceStarter.activate(UserInterfaceStarter.java:54)
        at
org.eclipse.jdt.internal.ui.refactoring.reorg.RenameUserInterfaceStarter.activate(RenameUserInterfaceStarter.java:113)
        at
org.eclipse.jdt.internal.ui.refactoring.actions.RenameResourceAction.run(RenameResourceAction.java:64)
        at org.eclipse.jdt.ui.actions.RenameAction.run(RenameAction.java:118)
        at
org.eclipse.jdt.ui.actions.SelectionDispatchAction.dispatchRun(SelectionDispatchAction.java:212)
        at
org.eclipse.jdt.ui.actions.SelectionDispatchAction.run(SelectionDispatchAction.java:188)
        at org.eclipse.jface.action.Action.runWithEvent(Action.java:881)
        at
org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:899)
        at
org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:850)
        at
org.eclipse.jface.action.ActionContributionItem$7.handleEvent(ActionContributionItem.java:769)
        at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:82)
        at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:796)
        at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:2725)
        at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2390)
        at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1353)
        at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1324)
        at
org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:243)
        at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:141)
        at org.eclipse.ui.internal.ide.IDEApplication.run(IDEApplication.java:90)
        at
org.eclipse.core.internal.runtime.PlatformActivator$1.run(PlatformActivator.java:298)
        at
org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:249)
        at
org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:126)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:324)
        at org.eclipse.core.launcher.Main.basicRun(Main.java:269)
        at org.eclipse.core.launcher.Main.run(Main.java:722)
        at org.eclipse.core.launcher.Main.main(Main.java:706)

"VM Thread" prio=5 tid=0x009bdd38 nid=0xec0 runnable

"VM Periodic Task Thread" prio=10 tid=0x00a111a0 nid=0x10c waiting on condition
"Suspend Checker Thread" prio=10 tid=0x009fb960 nid=0xdc runnable
Comment 1 Philipe Mulet CLA 2004-05-17 10:00:21 EDT
We only check for cancel when handing back compilation results.
In order to check more often, we'd have to provide an alternate mechanism, as 
the compiler is not allowed to directly see progress monitors which are 
Eclipse specific.

Post 3.0
Comment 2 Philipe Mulet CLA 2004-05-24 13:05:18 EDT
Reopening, someone else complained about slow error diagnosis.
Comment 3 Philipe Mulet CLA 2004-05-24 13:06:58 EDT
Suspecting the following to be using all CPU...

org.eclipse.jdt.internal.compiler.parser.diagnose.DiagnoseParser.scopeTrialChec
k(DiagnoseParser.java:1346)
        at
org.eclipse.jdt.internal.compiler.parser.diagnose.DiagnoseParser.scopeTrial
(DiagnoseParser.java:1309)
Comment 4 David Audel CLA 2004-05-25 07:29:03 EDT
daniel - what is the size of your large zip in your test case ?
Comment 5 Dani Megert CLA 2004-05-25 07:44:41 EDT
>20MB as outlined
Comment 6 David Audel CLA 2004-05-25 09:22:31 EDT
*** Bug 63432 has been marked as a duplicate of this bug. ***
Comment 7 David Audel CLA 2004-05-28 09:44:12 EDT
Diagnose takes too much time for very large files with a lot of syntax errors.

Possible improvment:
- DiagnoseParser#scopeTrialCheck: limit the depth of scopeTrialCheck recursive 
call
- DiagnoseParser#diagnoseParse: stop diagnose when the maximum errors per unit 
is reached.
- CompilationUnit#buildStructure: diagnose only one syntax error when it's 
possible
- SourceInder#indexDocument: diagnose only one syntax error 
Comment 8 David Audel CLA 2004-05-28 09:45:36 EDT
Created attachment 11270 [details]
diagnose performance improvment
Comment 9 David Audel CLA 2004-05-28 10:08:40 EDT
Fixed and released.
Comment 10 Olivier Thomann CLA 2004-05-28 16:04:14 EDT
David, could you please verify this one?
Comment 11 David Audel CLA 2004-06-01 05:01:06 EDT
Verified for 3.0RC1