Bug 88500 - UI stops responding for over a minute
Summary: UI stops responding for over a minute
Status: RESOLVED WORKSFORME
Alias: None
Product: JDT
Classification: Eclipse Project
Component: Text (show other bugs)
Version: 3.1   Edit
Hardware: PC Windows XP
: P3 normal (vote)
Target Milestone: ---   Edit
Assignee: JDT-Text-Inbox CLA
QA Contact:
URL:
Whiteboard:
Keywords: performance
Depends on:
Blocks:
 
Reported: 2005-03-18 14:13 EST by Stefan Xenos CLA
Modified: 2005-05-10 09:23 EDT (History)
6 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Stefan Xenos CLA 2005-03-18 14:13:39 EST
N20050311-0010

I was doing a number of checkouts and synchronizing with CVS while autobuild was
running. The UI stopped responding for more than a minute. Here's the thread dump:

Full thread dump Java HotSpot(TM) Client VM (1.4.2_04-b05 mixed mode):

"Worker-18" prio=5 tid=0x04058270 nid=0xca0 in Object.wait() [4dbf000..4dbfd8c]
        at java.lang.Object.wait(Native Method)
        at org.eclipse.core.internal.jobs.Semaphore.acquire(Semaphore.java:38)
        - locked <0x15ee1500> (a org.eclipse.core.internal.jobs.Semaphore)
        at org.eclipse.core.internal.jobs.JobManager.join(JobManager.java:583)
        at org.eclipse.core.internal.jobs.InternalJob.join(InternalJob.java:304)
        at org.eclipse.core.runtime.jobs.Job.join(Job.java:353)
        at
org.eclipse.ui.views.markers.internal.TableContentProvider.doUpdate(TableContentProvider.java:362)
        at
org.eclipse.ui.views.markers.internal.TableContentProvider.access$4(TableContentProvider.java:350)
        at
org.eclipse.ui.views.markers.internal.TableContentProvider$3.run(TableContentProvider.java:187)
        at
org.eclipse.ui.views.markers.internal.RestartableJob$2.run(RestartableJob.java:85)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:67)

"Text Viewer Hover Presenter" daemon prio=2 tid=0x03fe5b08 nid=0x5f8 runnable
[4c3f000..4c3fd8c]
        at java.util.zip.ZipEntry.initFields(Native Method)
        at java.util.zip.ZipEntry.<init>(ZipEntry.java:102)
        at java.util.zip.ZipFile$2.nextElement(ZipFile.java:329)
        - locked <0x176c5f00> (a java.util.zip.ZipFile)
        at
org.eclipse.jdt.internal.core.JarPackageFragmentRoot.computeChildren(JarPackageFragmentRoot.java:86)
        at
org.eclipse.jdt.internal.core.PackageFragmentRoot.buildStructure(PackageFragmentRoot.java:173)
        at org.eclipse.jdt.internal.core.Openable.generateInfos(Openable.java:203)
        at
org.eclipse.jdt.internal.core.JavaElement.openWhenClosed(JavaElement.java:487)
        at
org.eclipse.jdt.internal.core.JavaElement.getElementInfo(JavaElement.java:231)
        at
org.eclipse.jdt.internal.core.JavaElement.getElementInfo(JavaElement.java:217)
        at
org.eclipse.jdt.internal.core.JavaElement.getChildren(JavaElement.java:172)
        at
org.eclipse.jdt.internal.core.NameLookup.findAllTypes(NameLookup.java:237)
        at org.eclipse.jdt.internal.core.NameLookup.seekTypes(NameLookup.java:687)
        at
org.eclipse.jdt.internal.core.SearchableEnvironment.findTypes(SearchableEnvironment.java:353)
        at
org.eclipse.jdt.internal.core.SearchableEnvironment.findTypes(SearchableEnvironment.java:329)
        at
org.eclipse.jdt.internal.codeassist.SelectionEngine.select(SelectionEngine.java:740)
        at org.eclipse.jdt.internal.core.Openable.codeSelect(Openable.java:140)
        at
org.eclipse.jdt.internal.core.CompilationUnit.codeSelect(CompilationUnit.java:305)
        at
org.eclipse.jdt.internal.core.CompilationUnit.codeSelect(CompilationUnit.java:299)
        at
org.eclipse.jdt.internal.ui.text.java.hover.AbstractJavaEditorTextHover.getHoverInfo(AbstractJavaEditorTextHover.java
:108)
        - locked <0x14135918> (a org.eclipse.jdt.internal.core.CompilationUnit)
        at
org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo(BestMatchHover.java:102)
        at
org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo(JavaEditorTextHoverProxy.java:69)
        at
org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:160)

"Worker-17" prio=5 tid=0x040811e8 nid=0xc78 in Object.wait() [4bbf000..4bbfd8c]
        at java.lang.Object.wait(Native Method)
        - waiting on <0x159e9fd8> (a org.eclipse.ui.internal.Semaphore)
        at org.eclipse.ui.internal.Semaphore.acquire(Semaphore.java:41)
        - locked <0x159e9fd8> (a org.eclipse.ui.internal.Semaphore)
        at org.eclipse.ui.internal.UISynchronizer.syncExec(UISynchronizer.java:45)
        at org.eclipse.swt.widgets.Display.syncExec(Display.java:3219)
        at
org.eclipse.team.internal.ui.synchronize.SynchronizeModelUpdateHandler.runViewUpdate(SynchronizeModelUpdateHandler.ja
va:549)
        at
org.eclipse.team.internal.ui.synchronize.SynchronizeModelUpdateHandler.handleChanges(SynchronizeModelUpdateHandler.ja
va:512)
        at
org.eclipse.team.internal.ui.synchronize.SynchronizeModelUpdateHandler.processEvent(SynchronizeModelUpdateHandler.jav
a:251)
        at
org.eclipse.team.internal.core.BackgroundEventHandler.processEvents(BackgroundEventHandler.java:329)
        at
org.eclipse.team.internal.core.BackgroundEventHandler$1.run(BackgroundEventHandler.java:173)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:67)

"Worker-15" prio=5 tid=0x0422b008 nid=0xf54 runnable [3d5f000..3d5fd8c]
        at
org.eclipse.jdt.internal.compiler.parser.Scanner.getNextToken(Scanner.java:802)
        at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:8356)
        at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:8552)
        at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:8517)
        at
org.eclipse.jdt.internal.compiler.parser.Parser.dietParse(Parser.java:7244)
        at
org.eclipse.jdt.internal.compiler.Compiler.beginToCompile(Compiler.java:295)
        at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:321)
        at
org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:225)
        at
org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:175)
        at
org.eclipse.jdt.internal.core.builder.BatchImageBuilder.build(BatchImageBuilder.java:49)
        at
org.eclipse.jdt.internal.core.builder.JavaBuilder.buildAll(JavaBuilder.java:212)
        at
org.eclipse.jdt.internal.core.builder.JavaBuilder.build(JavaBuilder.java:140)
        at
org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:581)
        at
org.eclipse.core.internal.runtime.InternalPlatform.run(InternalPlatform.java:1015)
        at org.eclipse.core.runtime.Platform.run(Platform.java:757)
        at
org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:160)
        at
org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:198)
        at
org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:227)
        at
org.eclipse.core.internal.runtime.InternalPlatform.run(InternalPlatform.java:1015)
        at org.eclipse.core.runtime.Platform.run(Platform.java:757)
        at
org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:230)
        at
org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:249)
        at
org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:278)
        at
org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:139)
        at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:200)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:67)

"Worker-14" prio=5 tid=0x041eede8 nid=0x368 in Object.wait() [4b7f000..4b7fd8c]
        at java.lang.Object.wait(Native Method)
        at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:168)
        - locked <0x13871580> (a org.eclipse.core.internal.jobs.WorkerPool)
        at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:200)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:60)

"Worker-13" prio=5 tid=0x041e12f8 nid=0xf68 in Object.wait() [4b3f000..4b3fd8c]
        at java.lang.Object.wait(Native Method)
        at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:168)
        - locked <0x13871580> (a org.eclipse.core.internal.jobs.WorkerPool)
        at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:200)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:60)

"Thread-16" prio=5 tid=0x03f3e420 nid=0xabc runnable [4a2f000..4a2fd8c]
        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)

"Worker-12" prio=5 tid=0x02f923c8 nid=0x340 in Object.wait() [48cf000..48cfd8c]
        at java.lang.Object.wait(Native Method)
        at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:168)
        - locked <0x13871580> (a org.eclipse.core.internal.jobs.WorkerPool)
        at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:200)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:60)

"Worker-11" prio=5 tid=0x03334e20 nid=0x288 in Object.wait() [488f000..488fd8c]
        at java.lang.Object.wait(Native Method)
        at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:168)
        - locked <0x13871580> (a org.eclipse.core.internal.jobs.WorkerPool)
        at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:200)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:60)

"Worker-10" prio=5 tid=0x032fc128 nid=0xd68 in Object.wait() [484f000..484fd8c]
        at java.lang.Object.wait(Native Method)
        at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:168)
        - locked <0x13871580> (a org.eclipse.core.internal.jobs.WorkerPool)
        at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:200)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:60)

"Worker-9" prio=5 tid=0x03323e90 nid=0xa00 in Object.wait() [480f000..480fd8c]
        at java.lang.Object.wait(Native Method)
        at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:168)
        - locked <0x13871580> (a org.eclipse.core.internal.jobs.WorkerPool)
        at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:200)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:60)

"Worker-8" prio=5 tid=0x03002b90 nid=0xbdc in Object.wait() [47cf000..47cfd8c]
        at java.lang.Object.wait(Native Method)
        at org.eclipse.core.internal.jobs.Semaphore.acquire(Semaphore.java:38)
        - locked <0x15eba3c8> (a org.eclipse.core.internal.jobs.Semaphore)
        at org.eclipse.core.internal.jobs.JobManager.join(JobManager.java:583)
        at org.eclipse.core.internal.jobs.InternalJob.join(InternalJob.java:304)
        at org.eclipse.core.runtime.jobs.Job.join(Job.java:353)
        at
org.eclipse.ui.views.markers.internal.MarkerView.internalRefresh(MarkerView.java:250)
        at
org.eclipse.ui.views.markers.internal.MarkerView.access$3(MarkerView.java:181)
        at
org.eclipse.ui.views.markers.internal.MarkerView$3.run(MarkerView.java:281)
        at
org.eclipse.ui.views.markers.internal.RestartableJob$2.run(RestartableJob.java:85)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:67)

"Worker-7" prio=5 tid=0x03361bc8 nid=0xaf4 in Object.wait() [478f000..478fd8c]
        at java.lang.Object.wait(Native Method)
        at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:168)
        - locked <0x13871580> (a org.eclipse.core.internal.jobs.WorkerPool)
        at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:200)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:60)

"Worker-6" prio=5 tid=0x0337dcd8 nid=0x608 in Object.wait() [474f000..474fd8c]
        at java.lang.Object.wait(Native Method)
        at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:168)
        - locked <0x13871580> (a org.eclipse.core.internal.jobs.WorkerPool)
        at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:200)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:60)

"Worker-5" prio=5 tid=0x03340398 nid=0x3a0 in Object.wait() [46cf000..46cfd8c]
        at java.lang.Object.wait(Native Method)
        at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:168)
        - locked <0x13871580> (a org.eclipse.core.internal.jobs.WorkerPool)
        at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:200)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:60)

"Worker-4" prio=5 tid=0x02fff838 nid=0x8cc in Object.wait() [3e1f000..3e1fd8c]
        at java.lang.Object.wait(Native Method)
        at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:168)
        - locked <0x13871580> (a org.eclipse.core.internal.jobs.WorkerPool)
        at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:200)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:60)

"Worker-3" prio=5 tid=0x03561398 nid=0xa24 in Object.wait() [470f000..470fd8c]
        at java.lang.Object.wait(Native Method)
        at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:168)
        - locked <0x13871580> (a org.eclipse.core.internal.jobs.WorkerPool)
        at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:200)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:60)

"Worker-2" prio=5 tid=0x035c8108 nid=0xae0 in Object.wait() [468f000..468fd8c]
        at java.lang.Object.wait(Native Method)
        at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:168)
        - locked <0x13871580> (a org.eclipse.core.internal.jobs.WorkerPool)
        at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:200)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:60)

"All Types Caching" prio=4 tid=0x03309558 nid=0xa9c waiting on condition
[3c1f000..3c1fd8c]
        at java.lang.Thread.sleep(Native Method)
        at
org.eclipse.jdt.internal.corext.util.AllTypesCache$TypeCacher.run(AllTypesCache.java:147)

"org.eclipse.jdt.internal.ui.text.JavaReconciler" daemon prio=2 tid=0x034a8ea8
nid=0xb0 waiting for monitor entry [3b6f000..3b6f
d8c]
        at
org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.reconcile(JavaReconcilingStrategy.java:90)
        - waiting to lock <0x14135918> (a
org.eclipse.jdt.internal.core.CompilationUnit)
        at
org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.reconcile(JavaReconcilingStrategy.java:133)
        at
org.eclipse.jdt.internal.ui.text.CompositeReconcilingStrategy.reconcile(CompositeReconcilingStrategy.java:86)
        at
org.eclipse.jdt.internal.ui.text.JavaCompositeReconcilingStrategy.reconcile(JavaCompositeReconcilingStrategy.java:94)

        at
org.eclipse.jface.text.reconciler.MonoReconciler.process(MonoReconciler.java:75)
        at
org.eclipse.jdt.internal.ui.text.JavaReconciler.process(JavaReconciler.java:318)
        - locked <0x14136ad8> (a java.lang.Object)
        at
org.eclipse.jface.text.reconciler.AbstractReconciler$BackgroundThread.run(AbstractReconciler.java:204)

"org.eclipse.jdt.internal.ui.text.JavaReconciler" daemon prio=2 tid=0x02f643d0
nid=0x980 runnable [3b2f000..3b2fd8c]
        at java.lang.Object.wait(Native Method)
        - waiting on <0x14061870> (a
org.eclipse.jface.text.reconciler.DirtyRegionQueue)
        at
org.eclipse.jface.text.reconciler.AbstractReconciler$BackgroundThread.run(AbstractReconciler.java:176)
        - locked <0x14061870> (a org.eclipse.jface.text.reconciler.DirtyRegionQueue)

"Worker-1" prio=5 tid=0x00a699f8 nid=0xc00 in Object.wait() [3acf000..3acfd8c]
        at java.lang.Object.wait(Native Method)
        at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:168)
        - locked <0x13871580> (a org.eclipse.core.internal.jobs.WorkerPool)
        at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:200)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:60)

"Java indexing" daemon prio=4 tid=0x02fc1a70 nid=0xdac in Object.wait()
[3a8f000..3a8fd8c]
        at java.lang.Object.wait(Native Method)
        - waiting on <0x13d7f710> (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:345)
        - locked <0x13d7f710> (a
org.eclipse.jdt.internal.core.search.indexing.IndexManager)
        at java.lang.Thread.run(Thread.java:534)

"Reference Cleaner: 1" prio=7 tid=0x03211ee8 nid=0x8e0 in Object.wait()
[397f000..397fd8c]
        at java.lang.Object.wait(Native Method)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:111)
        - locked <0x13ceb938> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:127)
        at
org.eclipse.jface.resource.ImageCache$ReferenceCleanerThread.run(ImageCache.java:426)

"Worker-0" prio=5 tid=0x032141f0 nid=0xb70 in Object.wait() [393f000..393fd8c]
        at java.lang.Object.wait(Native Method)
        at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:168)
        - locked <0x13871580> (a org.eclipse.core.internal.jobs.WorkerPool)
        at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:200)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:60)

"Start Level Event Dispatcher" daemon prio=5 tid=0x00a546f0 nid=0xe4c in
Object.wait() [31df000..31dfd8c]
        at java.lang.Object.wait(Native Method)
        - waiting on <0x137c2288> (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:162)
        - locked <0x137c2288> (a org.eclipse.osgi.framework.eventmgr.EventThread)
        at org.eclipse.osgi.framework.eventmgr.EventThread.run(EventThread.java:100)

"Framework Event Dispatcher" daemon prio=5 tid=0x00a32bf8 nid=0xe1c in
Object.wait() [319f000..319fd8c]
        at java.lang.Object.wait(Native Method)
        - waiting on <0x137c2340> (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:162)
        - locked <0x137c2340> (a org.eclipse.osgi.framework.eventmgr.EventThread)
        at org.eclipse.osgi.framework.eventmgr.EventThread.run(EventThread.java:100)

"State Data Manager" daemon prio=5 tid=0x00a1c570 nid=0x2a8 waiting on condition
[315f000..315fd8c]
        at java.lang.Thread.sleep(Native Method)
        at
org.eclipse.osgi.internal.resolver.StateManager.run(StateManager.java:187)
        at java.lang.Thread.run(Thread.java:534)

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

"Finalizer" daemon prio=9 tid=0x009bfe08 nid=0xd44 in Object.wait()
[2dcf000..2dcfd8c]
        at java.lang.Object.wait(Native Method)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:111)
        - locked <0x13778158> (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=0x009be9d8 nid=0x4e4 in Object.wait()
[2d8f000..2d8fd8c]
        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 <0x137781c0> (a java.lang.ref.Reference$Lock)

"main" prio=7 tid=0x00035320 nid=0xe8c waiting for monitor entry [7f000..7fc40]
        at
org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitEditor.getElementAt(CompilationUnitEditor.java:1290)
        - waiting to lock <0x14135918> (a
org.eclipse.jdt.internal.core.CompilationUnit)
        at
org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitEditor$RememberedOffset.setOffset(CompilationUnitEditor.java:89
5)
        at
org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitEditor$RememberedSelection.remember(CompilationUnitEditor.java:
785)
        at
org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitEditor.rememberSelection(CompilationUnitEditor.java:1821)
        at
org.eclipse.ui.texteditor.AbstractTextEditor$4.run(AbstractTextEditor.java:328)
        at
org.eclipse.ui.texteditor.AbstractTextEditor$ElementStateListener.execute(AbstractTextEditor.java:458)
        at
org.eclipse.ui.texteditor.AbstractTextEditor$ElementStateListener.elementContentAboutToBeReplaced(AbstractTextEditor.
java:332)
        at
org.eclipse.ui.editors.text.TextFileDocumentProvider$FileBufferListener.bufferContentAboutToBeReplaced(TextFileDocume
ntProvider.java:234)
        at
org.eclipse.core.internal.filebuffers.TextFileBufferManager$4.run(TextFileBufferManager.java:366)
        at
org.eclipse.core.internal.runtime.InternalPlatform.run(InternalPlatform.java:1015)
        at org.eclipse.core.runtime.Platform.run(Platform.java:757)
        at
org.eclipse.core.internal.filebuffers.TextFileBufferManager.fireBufferContentAboutToBeReplaced(TextFileBufferManager.
java:364)
        at
org.eclipse.core.internal.filebuffers.ResourceTextFileBuffer.handleFileContentChanged(ResourceTextFileBuffer.java:427
)
        at
org.eclipse.core.internal.filebuffers.ResourceFileBuffer$2.execute(ResourceFileBuffer.java:142)
        at
org.eclipse.core.internal.filebuffers.ResourceFileBuffer$SafeFileChange.run(ResourceFileBuffer.java:78)
        at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
        at
org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:118)
        - locked <0x159bc8a8> (a org.eclipse.swt.widgets.RunnableLock)
        at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:2871)
        at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2530)
        at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1514)
        at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1478)
        at
org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:297)
        at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:143)
        at org.eclipse.ui.internal.ide.IDEApplication.run(IDEApplication.java:103)
        at
org.eclipse.core.internal.runtime.PlatformActivator$1.run(PlatformActivator.java:228)
        at
org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:338)
        at
org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:151)
        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.invokeFramework(Main.java:268)
        at org.eclipse.core.launcher.Main.basicRun(Main.java:260)
        at org.eclipse.core.launcher.Main.run(Main.java:887)
        at org.eclipse.core.launcher.Main.main(Main.java:871)

"VM Thread" prio=5 tid=0x009fb6d8 nid=0xca8 runnable

"VM Periodic Task Thread" prio=10 tid=0x0003ff48 nid=0x9b0 waiting on condition
"Suspend Checker Thread" prio=10 tid=0x009c2230 nid=0x990 runnable
Comment 1 Kim Horne CLA 2005-03-19 04:05:10 EST
Any ideas John?
Comment 2 John Arthorne CLA 2005-03-21 10:45:56 EST
The thread "Text Viewer Hover Presenter" owns the object monitor for a
compilation unit, and is doing a long search operation.  The UI thread is
running an asyncExec from the Java editor that is trying to lock the same
compilation unit.  Moving to JDT text.  I don't know why the compilation unit
needs to be locked - moving to JDT text for further analysis.
Comment 3 Dani Megert CLA 2005-03-22 04:56:08 EST
We need to sync on the CU to get the correct element.
ICodeAssist.codeSelect(...) shouldn't' take a minute.

When my workspace blocks for a while and I get the stack dump it's always inside
reading the ZIP file. Most of the time when I then go back to the workspace it
gets unlocked. Maybe the OS is locking the file and this is causing the lock.

Moving to JCore for comments about spending one minute inside codeSelect(...)
Comment 4 David Audel CLA 2005-04-07 08:07:11 EDT
The "Code Select" stack trace can only occur when the SelectionEngine fails to
find a result and try to propose at least a type with the same name of the
selection identifier. The stack trace also show that search indexes are not
ready and SearchableEnvironment try to find types inside JavaModel instead.
Comment 5 Mike Wilson CLA 2005-04-21 11:22:45 EDT
Regardless of the reason, it is unforgivable for the UI to be unresponsive for that length of time. All 
code paths that could *potentially* lead to this situation are suspect. We should be shooting for no 
more than 100ms delay.
Comment 6 David Audel CLA 2005-04-22 07:46:14 EDT
I created a test project with about 100 jars on the classpath.
A code select inside this project lasts 1.8 seconds and each jars are open twice.
So i don't think that codeselect can last 1 minute alone.
Most of the time is probably spent inside checkout, synchronization and full build.

Stefan - could give a description of the workspace where the problem appeared ?
Comment 7 Mike Wilson CLA 2005-04-22 09:36:11 EDT
Re "Most of the time is probably spent inside checkout, synchronization and full build.":
    There is (was?) a problem where writing sync info to disk could cause an extended delay. Adding 
Michael V for comment.
Comment 8 Michael Valenta CLA 2005-04-22 09:52:19 EDT
The problem is that it is not uncommon for a UI job to get blocked on a lock 
that is held for an extended time by a background thread. One instance of this 
is the CVS sync-info lock. What I have done in this case is add the ability to 
access the sync-info without obtaining the lock. I could not make it so that 
all reads would not require the lock but most will not. There were a few other 
cases identified were I was able to reduce the chances of the UI thread being 
blocked by a background thread. 

Unfortunately, about the only way to identify these situations is to take a 
stacktrace at the proper time to see what is happening and do whatever 
possible to remove the lock acquisition from the code run in the UI thread.
If it is not possible to remove the lock acquisition, then we shoudl do 
whatever we can to ensure that the user undestands what is going on by showing 
the blocked progress dialog. This would mean switching the lock used in this 
case to one that will show the blockage.
Comment 9 John Arthorne CLA 2005-04-22 14:57:06 EDT
I think this bug report went down the wrong path.  We know that the UI stopped
responding for a minute.  We know at one particular instant during that minute
everything was blocked on execution of code select.  The conclusion in comment
#3 was that an invocation of codeSelect was taking that full minute.  From
David's investigation it looks like this conclusion was incorrect.

Observe there are three threads involved in contention over the CompilationUnit
object's monitor: main, All Types Caching, and Text Viewer Hover Presenter.  I
suspect that Types Caching, the Hover Presenter, and possibly other threads were
competing over the CompilationUnit object for most of that minute.  Each one
might have only held the lock for a short time, but it could still result in
starvation of the UI thread in the process.

I suspect there is not much that can be done about this in the 3.1 period.  I
think the underlying problem is that JDT text uses the CompilationUnit object
monitor in several areas as its synchronization story.  This has several problems:
 - The object is public so any thread could be locking it for arbitrary periods
 - Competition for object monitors is not FIFO, so a thread can be starved for a
long period even if the lock is never held for a long period.
 - The lock is obtained in the UI thread, and there is no possibility of popping
up a "blocked" dialog as we do for ILock or ISchedulingRule.

The result of this story is that the UI can freeze for long periods, with no
hope of responsiveness, until the CompilationUnit object becomes available.
Unless there is a repeatable case where codeSelect is shown to take a long time,
I suggest moving this back to JDT text for consideration of cleaning up their
synchronization story in the long term.
Comment 10 Dani Megert CLA 2005-04-24 10:50:03 EDT
John, JDT Text uses model objects from JDT Core. How should JDT Text alone be
able to "cleaning up their synchronization story"?
Comment 11 John Arthorne CLA 2005-04-25 10:19:40 EDT
From what I see in this case, it looks like only the editor is acquiring locks
here.  I'm no expert on how JDT core and JDT text interact, so maybe there is
something I am missing.  Both core and UI components have a role to play in
thread safety. 

Generally, "core" plugins that don't know about the UI should:

1) Be API thread-safe. I.e., calling any two API methods in two threads at once
should not cause corruption, deadlock, starvation, or other such problems.
2) Clearly state what API methods are "long-running", usually by having an
IProgressMonitor parameter and supporting cancelation.
3) Don't mix locks used in "long-running" methods with non long-running methods.
I.e., a long running method should never block a concurrently executing thread
that is executing a non long-running method.

UI plugins should:

1) Never call "long-running" methods in the UI thread
2) If they use threads outside the UI thread, obey the rules above for core plugins.

Maybe the editor is using synchronized blocks before calling JDT core because
the JDT core API is not thread safe?  If this is true there might also be a JDT
core problem here.  In any case, the Java editor is both locking in the UI
thread, and calling "long-running" API methods (ICompilationUnit#reconcile) in
the UI thread, which is the root of the problem.
Comment 12 David Audel CLA 2005-05-10 06:21:16 EDT
I was never able to reproduce a 1 minutes freeze. It must probably happen with a
specific workspace configuration.

codeSelect is not design as a "long-running" method and with a lot of jar, code
select performance is not perfect but seems acceptable (~2sec see comment 6). So
we do not want to add a IProgessMonitor to our API.

Move to JDT/Text for comment.
Comment 13 Dani Megert CLA 2005-05-10 09:23:14 EDT
Please reopen if you can reproduce the 1 minute freeze.