Bug 79514 - [index] Hang waiting for Java Type Dialog
Summary: [index] Hang waiting for Java Type Dialog
Status: VERIFIED FIXED
Alias: None
Product: JDT
Classification: Eclipse Project
Component: Core (show other bugs)
Version: 3.1   Edit
Hardware: PC Linux-GTK
: P3 normal (vote)
Target Milestone: 3.1 M7   Edit
Assignee: Frederic Fusier CLA
QA Contact:
URL:
Whiteboard:
Keywords: performance
Depends on:
Blocks:
 
Reported: 2004-11-25 13:50 EST by Billy Biggs CLA
Modified: 2005-05-11 06:32 EDT (History)
3 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Billy Biggs CLA 2004-11-25 13:50:06 EST
I got this hang when I hit Ctrl-Shift-T.

Build: eclipse-I200411230838
GTK-Path: /devel/gtk+-2.4.13
Full thread dump Java HotSpot(TM) Client VM (1.4.2_03-b02 mixed mode):

"ModalContext" prio=1 tid=0x08e74570 nid=0xef5 in Object.wait() [5bc5a000..5bc5a854]
	at java.lang.Object.wait(Native Method)
	- waiting on <0x4673a550> (a java.lang.Object)
	at
org.eclipse.jdt.internal.corext.util.AllTypesCache.getAllTypes(AllTypesCache.java:311)
	- locked <0x4673a550> (a java.lang.Object)
	at
org.eclipse.jdt.internal.corext.util.AllTypesCache.getTypes(AllTypesCache.java:243)
	at
org.eclipse.jdt.internal.ui.dialogs.TypeSelectionDialog$1.run(TypeSelectionDialog.java:189)
	at
org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:105)

"org.eclipse.jface.text.reconciler.MonoReconciler" daemon prio=1 tid=0x0909d6a0
nid=0xef5 in Object.wait() [5bddd000..5bddd854]
	at java.lang.Object.wait(Native Method)
	at
org.eclipse.jface.text.reconciler.AbstractReconciler$BackgroundThread.run(AbstractReconciler.java:176)
	- locked <0x4e9ed980> (a org.eclipse.jface.text.reconciler.DirtyRegionQueue)

"org.eclipse.jface.text.reconciler.MonoReconciler" daemon prio=1 tid=0x08dab870
nid=0xef5 in Object.wait() [5bbd9000..5bbd9854]
	at java.lang.Object.wait(Native Method)
	at
org.eclipse.jface.text.reconciler.AbstractReconciler$BackgroundThread.run(AbstractReconciler.java:176)
	- locked <0x4e9ed9e0> (a org.eclipse.jface.text.reconciler.DirtyRegionQueue)

"org.eclipse.jface.text.reconciler.MonoReconciler" daemon prio=1 tid=0x089b9a08
nid=0xef5 in Object.wait() [5bd5c000..5bd5c854]
	at java.lang.Object.wait(Native Method)
	at
org.eclipse.jface.text.reconciler.AbstractReconciler$BackgroundThread.run(AbstractReconciler.java:176)
	- locked <0x4e9eda40> (a org.eclipse.jface.text.reconciler.DirtyRegionQueue)

"org.eclipse.jface.text.reconciler.MonoReconciler" daemon prio=1 tid=0x08d11440
nid=0xef5 in Object.wait() [5babd000..5babd854]
	at java.lang.Object.wait(Native Method)
	at
org.eclipse.jface.text.reconciler.AbstractReconciler$BackgroundThread.run(AbstractReconciler.java:176)
	- locked <0x4e9edaa0> (a org.eclipse.jface.text.reconciler.DirtyRegionQueue)

"org.eclipse.jface.text.reconciler.MonoReconciler" daemon prio=1 tid=0x091958f0
nid=0xef5 in Object.wait() [5b51f000..5b51f854]
	at java.lang.Object.wait(Native Method)
	at
org.eclipse.jface.text.reconciler.AbstractReconciler$BackgroundThread.run(AbstractReconciler.java:176)
	- locked <0x4e9edb00> (a org.eclipse.jface.text.reconciler.DirtyRegionQueue)

"org.eclipse.jface.text.reconciler.MonoReconciler" daemon prio=1 tid=0x08ae7948
nid=0xef5 in Object.wait() [5d280000..5d280854]
	at java.lang.Object.wait(Native Method)
	at
org.eclipse.jface.text.reconciler.AbstractReconciler$BackgroundThread.run(AbstractReconciler.java:176)
	- locked <0x4e9edb60> (a org.eclipse.jface.text.reconciler.DirtyRegionQueue)

"All Types Caching" prio=1 tid=0x08fd38f8 nid=0xef5 sleeping[5bb58000..5bb58854]
	at java.lang.Thread.sleep(Native Method)
	at
org.eclipse.jdt.internal.core.search.processing.JobManager.performConcurrentJob(JobManager.java:244)
	at
org.eclipse.jdt.internal.core.search.SearchBasicEngine.searchAllTypeNames(SearchBasicEngine.java:509)
	at
org.eclipse.jdt.core.search.SearchEngine.searchAllTypeNames(SearchEngine.java:571)
	at
org.eclipse.jdt.internal.corext.util.AllTypesCache.search(AllTypesCache.java:550)
	at
org.eclipse.jdt.internal.corext.util.AllTypesCache$TypeCacher.doSearchTypes(AllTypesCache.java:197)
	at
org.eclipse.jdt.internal.corext.util.AllTypesCache$TypeCacher.run(AllTypesCache.java:159)

"Worker-29" prio=1 tid=0x089cce20 nid=0xef5 in Object.wait() [58f44000..58f44854]
	at java.lang.Object.wait(Native Method)
	at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:168)
	- locked <0x45de57f8> (a org.eclipse.core.internal.jobs.WorkerPool)
	at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:195)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:59)

"Indexer TimeOut Thread" daemon prio=1 tid=0x085e3dd0 nid=0xef5 in Object.wait()
[5afaf000..5afaf854]
	at java.lang.Object.wait(Native Method)
	- waiting on <0x4682ddc8> (a org.eclipse.cdt.core.parser.ParserTimeOut)
	at java.lang.Object.wait(Object.java:429)
	at org.eclipse.cdt.core.parser.ParserTimeOut.run(ParserTimeOut.java:56)
	- locked <0x4682ddc8> (a org.eclipse.cdt.core.parser.ParserTimeOut)
	at java.lang.Thread.run(Thread.java:534)

"C/C++ Indexer" daemon prio=1 tid=0x085e6968 nid=0xef5 sleeping[5af2e000..5af2e854]
	at java.lang.Thread.sleep(Native Method)
	at
org.eclipse.cdt.internal.core.search.processing.JobManager.run(JobManager.java:460)
	at java.lang.Thread.run(Thread.java:534)

"Java indexing" daemon prio=1 tid=0x08530f98 nid=0xef5 in Object.wait()
[5aa76000..5aa76854]
	at java.lang.Object.wait(Native Method)
	- waiting on <0x466cf5d0> (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 <0x466cf5d0> (a
org.eclipse.jdt.internal.core.search.indexing.IndexManager)
	at java.lang.Thread.run(Thread.java:534)

"Reference Cleaner: 1" prio=1 tid=0x08102f30 nid=0xef5 in Object.wait()
[591f9000..591f9854]
	at java.lang.Object.wait(Native Method)
	at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:111)
	- locked <0x4667ad08> (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:427)

"Start Level Event Dispatcher" daemon prio=1 tid=0x0823ef00 nid=0xef5 in
Object.wait() [590d5000..590d5854]
	at java.lang.Object.wait(Native Method)
	- waiting on <0x45b87bd0> (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 <0x45b87bd0> (a org.eclipse.osgi.framework.eventmgr.EventThread)
	at org.eclipse.osgi.framework.eventmgr.EventThread.run(EventThread.java:100)

"Framework Event Dispatcher" daemon prio=1 tid=0x082519f8 nid=0xef5 in
Object.wait() [59054000..59054854]
	at java.lang.Object.wait(Native Method)
	- waiting on <0x45b77c88> (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 <0x45b77c88> (a org.eclipse.osgi.framework.eventmgr.EventThread)
	at org.eclipse.osgi.framework.eventmgr.EventThread.run(EventThread.java:100)

"Signal Dispatcher" daemon prio=1 tid=0x0809d7a8 nid=0xef5 waiting on condition
[0..0]

"Finalizer" daemon prio=1 tid=0x08088950 nid=0xef5 in Object.wait()
[589da000..589da854]
	at java.lang.Object.wait(Native Method)
	at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:111)
	- locked <0x45afaa88> (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=1 tid=0x08087d60 nid=0xef5 in Object.wait()
[58959000..58959854]
	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 <0x45afaaf0> (a java.lang.ref.Reference$Lock)

"main" prio=1 tid=0x08052570 nid=0xef5 runnable [bfffa000..bfffc168]
	at org.eclipse.swt.internal.gtk.OS.Call(Native Method)
	at org.eclipse.swt.widgets.Display.sleep(Display.java:2977)
	at
org.eclipse.jface.operation.ModalContext$ModalContextThread.block(ModalContext.java:142)
	at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:279)
	at
org.eclipse.jface.dialogs.ProgressMonitorDialog.run(ProgressMonitorDialog.java:447)
	at
org.eclipse.ui.internal.progress.ProgressMonitorJobsDialog.run(ProgressMonitorJobsDialog.java:263)
	at org.eclipse.ui.internal.progress.ProgressManager$3.run(ProgressManager.java:840)
	at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:69)
	at
org.eclipse.ui.internal.progress.ProgressManager.busyCursorWhile(ProgressManager.java:874)
	at
org.eclipse.ui.internal.progress.ProgressManager.busyCursorWhile(ProgressManager.java:850)
	at org.eclipse.ui.internal.progress.ProgressManager.run(ProgressManager.java:1042)
	at
org.eclipse.jdt.internal.ui.dialogs.TypeSelectionDialog.open(TypeSelectionDialog.java:195)
	at org.eclipse.jdt.internal.ui.actions.OpenTypeAction.run(OpenTypeAction.java:68)
	at org.eclipse.jdt.internal.ui.actions.OpenTypeAction.run(OpenTypeAction.java:89)
	at org.eclipse.ui.internal.PluginAction.runWithEvent(PluginAction.java:298)
	at org.eclipse.ui.internal.WWinPluginAction.runWithEvent(WWinPluginAction.java:221)
	at org.eclipse.ui.commands.ActionHandler.execute(ActionHandler.java:188)
	at org.eclipse.ui.internal.commands.Command.execute(Command.java:130)
	at
org.eclipse.ui.internal.keys.WorkbenchKeyboard.executeCommand(WorkbenchKeyboard.java:445)
	at org.eclipse.ui.internal.keys.WorkbenchKeyboard.press(WorkbenchKeyboard.java:724)
	at
org.eclipse.ui.internal.keys.WorkbenchKeyboard.processKeyEvent(WorkbenchKeyboard.java:767)
	at
org.eclipse.ui.internal.keys.WorkbenchKeyboard.filterKeySequenceBindings(WorkbenchKeyboard.java:536)
	at
org.eclipse.ui.internal.keys.WorkbenchKeyboard.access$2(WorkbenchKeyboard.java:479)
	at
org.eclipse.ui.internal.keys.WorkbenchKeyboard$1.handleEvent(WorkbenchKeyboard.java:221)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:82)
	at org.eclipse.swt.widgets.Display.filterEvent(Display.java:1060)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:990)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1015)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1000)
	at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:1027)
	at org.eclipse.swt.widgets.Widget.gtk_key_press_event(Widget.java:595)
	at org.eclipse.swt.widgets.Control.gtk_key_press_event(Control.java:1870)
	at org.eclipse.swt.widgets.Composite.gtk_key_press_event(Composite.java:522)
	at org.eclipse.swt.widgets.Widget.windowProc(Widget.java:1327)
	at org.eclipse.swt.widgets.Display.windowProc(Display.java:3213)
	at org.eclipse.swt.internal.gtk.OS._gtk_main_do_event(Native Method)
	at org.eclipse.swt.internal.gtk.OS.gtk_main_do_event(OS.java:4604)
	at org.eclipse.swt.widgets.Display.eventProc(Display.java:903)
	at org.eclipse.swt.internal.gtk.OS._g_main_context_iteration(Native Method)
	at org.eclipse.swt.internal.gtk.OS.g_main_context_iteration(OS.java:1066)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2367)
	at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1579)
	at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1550)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:282)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:144)
	at org.eclipse.ui.internal.ide.IDEApplication.run(IDEApplication.java:102)
	at
org.eclipse.core.internal.runtime.PlatformActivator$1.run(PlatformActivator.java:220)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:273)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:129)
	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:185)
	at org.eclipse.core.launcher.Main.run(Main.java:710)
	at org.eclipse.core.launcher.Main.main(Main.java:694)

"VM Thread" prio=1 tid=0x08086a40 nid=0xef5 runnable 

"VM Periodic Task Thread" prio=1 tid=0x0809ffb8 nid=0xef5 waiting on condition 
"Suspend Checker Thread" prio=1 tid=0x0809ce08 nid=0xef5 runnable
Comment 1 Douglas Pollock CLA 2004-11-25 13:54:15 EST
I've seen this hang as well.  GTK+ 2.2.1.  Are you sure about the Eclipse 
version?  And have you talked to Silenio about this? 
Comment 2 Billy Biggs CLA 2004-11-25 14:02:35 EST
I'm sure of the GTK+ version.  Note that the UI was not blocked and was able to
respond to expose and resize events, so I do not think this is an SWT problem.
Comment 3 Philipe Mulet CLA 2004-11-26 05:32:28 EST
Do you remember having cancelled the OpenType dialog opening prior to hanging ?
Comment 4 Douglas Pollock CLA 2004-11-26 08:38:50 EST
No, I don't recall having done that. 
Comment 5 Frederic Fusier CLA 2004-11-26 09:02:32 EST
I cannot reproduce using GTK+2.2.1 and last integration build I200411240800.
Comment 6 Jerome Lanneluc CLA 2004-12-10 12:50:49 EST
Billy, have you seen this hang recently ? If you have, do you have anything
related to indexing in your .log file ?
Comment 7 Ringo De Smet CLA 2005-01-04 03:25:15 EST
I am able to reproduce this one.

Make sure you start up Eclipse with a *closed* Java project. After startup, open
the project and then Open Type. The progress dialog will be there forever. The
Cancel button is active though.

Before the Open Type works again, I have to rebuild the project and restart Eclipse.

Ringo
Comment 8 Ringo De Smet CLA 2005-01-04 03:27:12 EST
Forgot to mention:

Eclipse 3.1M3 on Windows 2000 with JDK 1.4.2_05. I am still running M3 since
post-M3 builds annoy me due to Bug 73969.

Ringo
Comment 9 Mike Wilson CLA 2005-04-25 13:05:45 EDT
Has the JDT Core team managed to reproduce the problem using the steps given by Ringo?

Note: If it is taking a long time to open, then it's a performance problem. If it *hangs* (i.e. never opens) 
then it's a bug whose priority should probably be raised.
Comment 10 Kent Johnson CLA 2005-05-03 04:57:34 EDT
I doubt we can reproduce this PR using HEAD since the AllTypesCache was 
removed last week.
Comment 11 Frederic Fusier CLA 2005-05-10 06:07:03 EDT
Time spent in scenario described by Ringo is to index files of the reopened
project(s).

Here are times noticed on an Eclipse 3.1 full source workspace (86 projects):
 1) Close all projects: ~45s
 2) Open all projects: ~7 s
 3) Index all files (~10600): ~30s

So, time to index all files sounds definitely reasonable...

Moreover, this scenario should happen seldom as user does not close/open often
big projects and even if it happens, indexing progress is shown to user in
dialog. So, he cannot longer feel that eclipse is currently hanging.

Due to all these reasons, I close this bug as FIXED.
Comment 12 Mike Wilson CLA 2005-05-10 09:17:04 EDT
Re: "Close all projects: ~45s"
   Just out of curiosity, why does it take 45 seconds to *close* all the projects. If the projects are all closed, 
then there should be nothing to index. It seems like it should be almost instant.
Comment 13 Frederic Fusier CLA 2005-05-10 09:34:30 EDT
Mike,
I didn't say that index take 45s while closing project. AFAIK, there's no
indexing during this operation. I put this time just to make indexing time
relative to other operations on same number of projects...
Comment 14 Mike Wilson CLA 2005-05-10 09:51:07 EDT
Apologies Fred. I misread. 

Adding JA to CC list to answer the question: Why does closing all projects take 45s?
Comment 15 John Arthorne CLA 2005-05-10 13:33:22 EDT
I have entered Bug 94436 to investigate performance of closing projects.  This
does have to do significant work, since it saves the project subtree to disk. 
Other PRE_CLOSE resource change listeners might also be adding some time.
Comment 16 Maxime Daniel CLA 2005-05-11 06:09:42 EDT
Verified for 3.1 M7 using build I20050509-2010 + jdt.core HEAD.