Bug 140105 - Eclipse hangs wen Error log is opened while initializing java tooling
Summary: Eclipse hangs wen Error log is opened while initializing java tooling
Status: RESOLVED INVALID
Alias: None
Product: Platform
Classification: Eclipse Project
Component: UI (show other bugs)
Version: 3.2   Edit
Hardware: PC Windows XP
: P3 critical (vote)
Target Milestone: ---   Edit
Assignee: Platform-UI-Inbox CLA
QA Contact:
URL:
Whiteboard:
Keywords: needinfo
Depends on:
Blocks:
 
Reported: 2006-05-03 22:35 EDT by Michael Scharf CLA
Modified: 2009-08-30 02:09 EDT (History)
3 users (show)

See Also:


Attachments
The dialog that blocks eclipse (61.59 KB, image/jpeg)
2006-05-03 22:37 EDT, Michael Scharf CLA
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
Description Michael Scharf CLA 2006-05-03 22:35:25 EDT
3.2RC2
I was clicking the error log, while eclipse was still initializing the java
tooling. I got a "java.lang.RuntimeException: WARNING: Prevented recursive attempt to activate".

This caused a non cancelable user operation to appear....


java.lang.RuntimeException: WARNING: Prevented recursive attempt to activate part org.eclipse.pde.runtime.LogView while still in the middle of activating part org.eclipse.jdt.ui.CompilationUnitEditor
	at org.eclipse.ui.internal.WorkbenchPage.setActivePart(WorkbenchPage.java:3089)
	at org.eclipse.ui.internal.WorkbenchPage.requestActivation(WorkbenchPage.java:2692)
	at org.eclipse.ui.internal.PartPane.requestActivation(PartPane.java:256)
	at org.eclipse.ui.internal.PartPane.handleEvent(PartPane.java:220)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:66)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:925)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:949)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:930)
	at org.eclipse.swt.widgets.Shell.setActiveControl(Shell.java:1199)
	at org.eclipse.swt.widgets.Shell.WM_MOUSEACTIVATE(Shell.java:1878)
	at org.eclipse.swt.widgets.Control.windowProc(Control.java:3287)
	at org.eclipse.swt.widgets.Decorations.windowProc(Decorations.java:1539)
	at org.eclipse.swt.widgets.Shell.windowProc(Shell.java:1634)
	at org.eclipse.swt.widgets.Display.windowProc(Display.java:4025)
	at org.eclipse.swt.internal.win32.OS.DefWindowProcW(Native Method)
	at org.eclipse.swt.internal.win32.OS.DefWindowProc(OS.java:1918)
	at org.eclipse.swt.widgets.Scrollable.callWindowProc(Scrollable.java:77)
	at org.eclipse.swt.widgets.Control.windowProc(Control.java:3334)
	at org.eclipse.swt.widgets.Display.windowProc(Display.java:4025)
	at org.eclipse.swt.internal.win32.OS.DefWindowProcW(Native Method)
	at org.eclipse.swt.internal.win32.OS.DefWindowProc(OS.java:1918)
	at org.eclipse.swt.widgets.Scrollable.callWindowProc(Scrollable.java:77)
	at org.eclipse.swt.widgets.Control.windowProc(Control.java:3334)
	at org.eclipse.swt.widgets.Display.windowProc(Display.java:4025)
	at org.eclipse.swt.internal.win32.OS.DefWindowProcW(Native Method)
	at org.eclipse.swt.internal.win32.OS.DefWindowProc(OS.java:1918)
	at org.eclipse.swt.widgets.Scrollable.callWindowProc(Scrollable.java:77)
	at org.eclipse.swt.widgets.Control.windowProc(Control.java:3334)
	at org.eclipse.swt.widgets.Display.windowProc(Display.java:4025)
	at org.eclipse.swt.internal.win32.OS.DefWindowProcW(Native Method)
	at org.eclipse.swt.internal.win32.OS.DefWindowProc(OS.java:1918)
	at org.eclipse.swt.widgets.Scrollable.callWindowProc(Scrollable.java:77)
	at org.eclipse.swt.widgets.Control.windowProc(Control.java:3334)
	at org.eclipse.swt.widgets.Display.windowProc(Display.java:4025)
	at org.eclipse.swt.internal.win32.OS.DefWindowProcW(Native Method)
	at org.eclipse.swt.internal.win32.OS.DefWindowProc(OS.java:1918)
	at org.eclipse.swt.widgets.Tree.callWindowProc(Tree.java:1203)
	at org.eclipse.swt.widgets.Tree.windowProc(Tree.java:4732)
	at org.eclipse.swt.widgets.Display.windowProc(Display.java:4025)
	at org.eclipse.swt.internal.win32.OS.CallWindowProcW(Native Method)
	at org.eclipse.swt.internal.win32.OS.CallWindowProc(OS.java:1842)
	at org.eclipse.swt.widgets.Tree.callWindowProc(Tree.java:1292)
	at org.eclipse.swt.widgets.Control.windowProc(Control.java:3334)
	at org.eclipse.swt.widgets.Tree.windowProc(Tree.java:4734)
	at org.eclipse.swt.widgets.Display.windowProc(Display.java:4025)
	at org.eclipse.swt.internal.win32.OS.PeekMessageW(Native Method)
	at org.eclipse.swt.internal.win32.OS.PeekMessage(OS.java:2387)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2963)
	at org.eclipse.ui.internal.dialogs.EventLoopProgressMonitor.runEventLoop(EventLoopProgressMonitor.java:123)
	at org.eclipse.ui.internal.dialogs.EventLoopProgressMonitor.isCanceled(EventLoopProgressMonitor.java:97)
	at org.eclipse.core.internal.jobs.ThreadJob.isCanceled(ThreadJob.java:126)
	at org.eclipse.core.internal.jobs.ThreadJob.joinRun(ThreadJob.java:161)
	at org.eclipse.core.internal.jobs.ImplicitJobs.begin(ImplicitJobs.java:87)
	at org.eclipse.core.internal.jobs.JobManager.beginRule(JobManager.java:219)
	at org.eclipse.core.internal.resources.WorkManager.checkIn(WorkManager.java:96)
	at org.eclipse.core.internal.resources.Workspace.prepareOperation(Workspace.java:1684)
	at org.eclipse.core.internal.resources.Project.touch(Project.java:1034)
	at org.eclipse.jdt.internal.core.SetClasspathOperation.executeOperation(SetClasspathOperation.java:288)
	at org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperation.java:720)
	at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1737)
	at org.eclipse.jdt.internal.core.JavaModelOperation.runOperation(JavaModelOperation.java:784)
	at org.eclipse.jdt.internal.core.JavaProject.setRawClasspath(JavaProject.java:3011)
	at org.eclipse.jdt.core.JavaCore$5.run(JavaCore.java:4202)
	at org.eclipse.jdt.internal.core.BatchOperation.executeOperation(BatchOperation.java:39)
	at org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperation.java:720)
	at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1737)
	at org.eclipse.jdt.core.JavaCore.run(JavaCore.java:4011)
	at org.eclipse.jdt.core.JavaCore.setClasspathContainer(JavaCore.java:4185)
	at org.eclipse.pde.internal.core.ModelEntry.updateClasspathContainer(ModelEntry.java:107)
	at org.eclipse.pde.internal.core.RequiredPluginsInitializer.initialize(RequiredPluginsInitializer.java:42)
	at org.eclipse.jdt.internal.core.JavaModelManager.initializeContainer(JavaModelManager.java:1900)
	at org.eclipse.jdt.internal.core.JavaModelManager$7.run(JavaModelManager.java:1846)
	at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1737)
	at org.eclipse.jdt.internal.core.JavaModelManager.initializeAllContainers(JavaModelManager.java:1855)
	at org.eclipse.jdt.internal.core.JavaModelManager.getClasspathContainer(JavaModelManager.java:1265)
	at org.eclipse.jdt.core.JavaCore.getClasspathContainer(JavaCore.java:1470)
	at org.eclipse.jdt.internal.core.JavaProject.getResolvedClasspath(JavaProject.java:2164)
	at org.eclipse.jdt.internal.core.JavaProject.getResolvedClasspath(JavaProject.java:2068)
	at org.eclipse.jdt.internal.core.DeltaProcessingState.initializeRoots(DeltaProcessingState.java:286)
	at org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperation.java:717)
	at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1737)
	at org.eclipse.jdt.core.JavaCore.run(JavaCore.java:4011)
	at org.eclipse.jdt.core.JavaCore.setClasspathContainer(JavaCore.java:4185)
	at org.eclipse.pde.internal.core.ModelEntry.updateClasspathContainer(ModelEntry.java:107)
	at org.eclipse.pde.internal.core.RequiredPluginsInitializer.initialize(RequiredPluginsInitializer.java:42)
	at org.eclipse.jdt.internal.core.JavaModelManager.initializeContainer(JavaModelManager.java:1900)
	at org.eclipse.jdt.internal.core.JavaModelManager.getClasspathContainer(JavaModelManager.java:1267)
	at org.eclipse.jdt.core.JavaCore.getClasspathContainer(JavaCore.java:1470)
	at org.eclipse.jdt.internal.core.JavaProject.getResolvedClasspath(JavaProject.java:2164)
	at org.eclipse.jdt.internal.core.JavaProject.getResolvedClasspath(JavaProject.java:2068)
	at org.eclipse.jdt.internal.core.JavaProject.isOnClasspath(JavaProject.java:2481)
	at org.eclipse.jdt.internal.ui.packageview.PackageExplorerPart.isOnClassPath(PackageExplorerPart.java:1356)
	at org.eclipse.jdt.internal.ui.packageview.PackageExplorerPart.showInput(PackageExplorerPart.java:1321)
	at org.eclipse.jdt.internal.ui.packageview.PackageExplorerPart.editorActivated(PackageExplorerPart.java:1300)
	at org.eclipse.jdt.internal.ui.packageview.PackageExplorerPart$1.partActivated(PackageExplorerPart.java:217)
	at org.eclipse.ui.internal.PartListenerList$1.run(PartListenerList.java:72)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37)
	at org.eclipse.core.runtime.Platform.run(Platform.java:843)
	at org.eclipse.ui.internal.PartListenerList.fireEvent(PartListenerList.java:57)
	at org.eclipse.ui.internal.PartListenerList.firePartActivated(PartListenerList.java:70)
	at org.eclipse.ui.internal.PartService.firePartActivated(PartService.java:73)
	at org.eclipse.ui.internal.PartService.setActivePart(PartService.java:171)
	at org.eclipse.ui.internal.WorkbenchPagePartList.fireActivePartChanged(WorkbenchPagePartList.java:56)
	at org.eclipse.ui.internal.PartList.setActivePart(PartList.java:126)
	at org.eclipse.ui.internal.WorkbenchPage.setActivePart(WorkbenchPage.java:3139)
	at org.eclipse.ui.internal.WorkbenchPage.activate(WorkbenchPage.java:588)
	at org.eclipse.ui.internal.WorkbenchPage.makeActive(WorkbenchPage.java:1150)
	at org.eclipse.ui.internal.WorkbenchPage.updateActivePart(WorkbenchPage.java:1130)
	at org.eclipse.ui.internal.WorkbenchPage.handleDeferredEvents(WorkbenchPage.java:1306)
	at org.eclipse.ui.internal.WorkbenchPage.deferUpdates(WorkbenchPage.java:1295)
	at org.eclipse.ui.internal.WorkbenchPage.closeEditors(WorkbenchPage.java:1269)
	at org.eclipse.ui.internal.WorkbenchPage.closeEditor(WorkbenchPage.java:1324)
	at org.eclipse.ui.internal.EditorPane.doHide(EditorPane.java:54)
	at org.eclipse.ui.internal.PartStack.close(PartStack.java:499)
	at org.eclipse.ui.internal.EditorStack.close(EditorStack.java:205)
	at org.eclipse.ui.internal.PartStack$1.close(PartStack.java:106)
	at org.eclipse.ui.internal.presentations.util.TabbedStackPresentation$1.handleEvent(TabbedStackPresentation.java:81)
	at org.eclipse.ui.internal.presentations.util.AbstractTabFolder.fireEvent(AbstractTabFolder.java:267)
	at org.eclipse.ui.internal.presentations.util.AbstractTabFolder.fireEvent(AbstractTabFolder.java:276)
	at org.eclipse.ui.internal.presentations.defaultpresentation.DefaultTabFolder.access$1(DefaultTabFolder.java:1)
	at org.eclipse.ui.internal.presentations.defaultpresentation.DefaultTabFolder$1.closeButtonPressed(DefaultTabFolder.java:67)
	at org.eclipse.ui.internal.presentations.PaneFolder.notifyCloseListeners(PaneFolder.java:580)
	at org.eclipse.ui.internal.presentations.PaneFolder$3.close(PaneFolder.java:187)
	at org.eclipse.swt.custom.CTabFolder.onMouse(CTabFolder.java:2107)
	at org.eclipse.swt.custom.CTabFolder$1.handleEvent(CTabFolder.java:292)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:66)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:925)
	at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3348)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2968)
	at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1914)
	at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1878)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:419)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:143)
	at org.eclipse.ui.internal.ide.IDEApplication.run(IDEApplication.java:95)
	at org.eclipse.core.internal.runtime.PlatformActivator$1.run(PlatformActivator.java:78)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:92)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:68)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:177)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.eclipse.core.launcher.Main.invokeFramework(Main.java:336)
	at org.eclipse.core.launcher.Main.basicRun(Main.java:280)
	at org.eclipse.core.launcher.Main.run(Main.java:977)
	at org.eclipse.core.launcher.Main.main(Main.java:952)
Comment 1 Michael Scharf CLA 2006-05-03 22:37:37 EDT
Created attachment 40318 [details]
The dialog that blocks eclipse
Comment 2 Wassim Melhem CLA 2006-05-03 23:20:48 EDT
John, what's your take on this?
Comment 3 John Arthorne CLA 2006-05-04 12:00:36 EDT
Yuck.

It looks like an editor has just been closed.  The package explorer is responding to the part activation request caused by the editor being closed. It triggers classpath initialization, but "initializing Java tooling" is already running in another thread so it gets blocked.  While the UI is blocked, the event queue is processed, and another part activation event is processed (for the log view).

What I can't see from this trace is why it hung.  Michael, I assume this stack trace you provided is from your log file, as opposed to a Ctrl+Break when in the hung state?

Culprit #1 seems to be JDT UI for causing a long running operation to start from within a part activation event.  Platform UI is possibly also a culprit for not nicely handling (or preventing) the recursive part activation.  I don't know the cause of the hang because I don't think we have the stack trace of the hang available.
Comment 4 Michael Scharf CLA 2006-05-05 00:04:08 EDT
Yes, the stracktrace is from the log. I just learned today how to start eclipse with the osgi console.

Indeed, i closed an editor before that happened. It was a java or a java classfile editor that showed a non existing file.

The "hang" was not a real deadlock. The attached dialog popped up and when I canceled the operation (by clicking the red square) it turned black for a few seconds and became red again... No way to get rid of that blocking dialog. Therefore, no way to safely exit eclipse...
Comment 5 Wassim Melhem CLA 2006-05-08 21:21:51 EDT
Moving to UI since the hanging was caused by the dialog that prevented the user from exiting.
Comment 6 Boris Bokowski CLA 2006-05-08 23:19:41 EDT
This looks to me like a potential loss of data since there might be unsaved files at the time you get the deadlock.  John, do you know if "initializing Java tooling" always happens right after you start Eclipse, or could this happen at any time e.g. when you switch to the Java perspective for the first time? 

Generally, I think it is bad that we spin the event loop while firing part activation events, but I don't know what we can do about this.

At this point, it might be easiest to fix this in JDT but we should definitely explore our options.
Comment 7 John Arthorne CLA 2006-05-09 13:37:28 EDT
Just recording some details here based on initial investigation.  The appearance of that dialog is governed by the methods WorkbenchDialogBlockedHandler.showBlocked and clearBlocked.  If calls to those methods are not correctly paired, then the dialog will never close. Tracing through the callers of those methods, there are a number of places where the setBlocked/clearBlocked methods may not be called. For example, finally blocks are never used so they may not be correctly paired in the case of exceptions.  
Comment 8 Boris Bokowski CLA 2007-01-03 14:45:48 EST
Michael, have you seen this again?  Together with John, we spent some time looking at the code and couldn't find anything that's obviously wrong.  Please reopen should you see this again.
Comment 9 Michael Scharf CLA 2007-01-04 22:26:21 EST
No, it happened once to me.... 
Comment 10 Denis Roy CLA 2009-08-30 02:09:45 EDT
As of now 'LATER' and 'REMIND' resolutions are no longer supported.
Please reopen this bug if it is still valid for you.