Community
Participate
Working Groups
build I20030528 - opened an old workspace (previously updated for build I20030304) - imported existing binary projects plus new one, org.eclipse.ant.ui, plus Platform Text plugins which were previously in source - after a while it hung (didn't see exactly where since I was in a different window) - hit Ctrl+break in my console window to get the following thread dumps Full thread dump: "Snapshot" prio=5 tid=0xe743958 nid=0xefc waiting on monitor [0xefcf000..0xefcfdbc] at java.lang.Object.wait(Native Method) at org.eclipse.core.internal.resources.DelayedSnapshotRunnable.run (DelayedSnapshotRunnable.java:38) at java.lang.Thread.run(Thread.java:484) "ModalContext" prio=5 tid=0xe6248a8 nid=0x96c waiting for monitor entry [0xef8f000..0xef8fdbc] at org.eclipse.jdt.internal.core.Openable.isOpen(Openable.java:323) at org.eclipse.jdt.internal.core.SetClasspathOperation.generateClasspathChangeDelt as(SetClasspathOperation.j at org.eclipse.jdt.internal.core.SetClasspathOperation.updateClasspath (SetClasspathOperation.java:584) at org.eclipse.jdt.internal.core.SetClasspathOperation.executeOperation (SetClasspathOperation.java:243) at org.eclipse.jdt.internal.core.JavaModelOperation.execute (JavaModelOperation.java:365) at org.eclipse.jdt.internal.core.JavaModelOperation.run (JavaModelOperation.java:704) at org.eclipse.core.internal.resources.Workspace.run (Workspace.java:1595) at org.eclipse.jdt.internal.core.JavaElement.runOperation (JavaElement.java:538) at org.eclipse.jdt.internal.core.JavaProject.setRawClasspath (JavaProject.java:2194) at org.eclipse.jdt.internal.core.JavaProject.setRawClasspath (JavaProject.java:2210) at org.eclipse.pde.internal.core.ClasspathUtilCore.setClasspath (ClasspathUtilCore.java:68) at org.eclipse.pde.internal.ui.wizards.imports.UpdateClasspathAction.setProjectBui ldpath(UpdateClasspathActi at org.eclipse.pde.internal.ui.wizards.imports.UpdateClasspathAction.doUpdateClass path(UpdateClasspathAction at org.eclipse.pde.internal.ui.wizards.imports.PluginImportWizard$3.run (PluginImportWizard.java:215) at org.eclipse.core.internal.resources.Workspace.run (Workspace.java:1595) at org.eclipse.pde.internal.ui.wizards.imports.PluginImportWizard$2.run (PluginImportWizard.java:190) at org.eclipse.jface.operation.ModalContext$ModalContextThread.run (ModalContext.java:101) "Decoration" daemon prio=2 tid=0xe66ed60 nid=0x8a4 waiting on monitor [0xee9f000..0xee9fdbc] at java.lang.Object.wait(Native Method) at java.lang.Object.wait(Object.java:420) at org.eclipse.ui.internal.decorators.DecorationScheduler.next (DecorationScheduler.java:214) at org.eclipse.ui.internal.decorators.DecorationScheduler$2.run (DecorationScheduler.java:240) at java.lang.Thread.run(Thread.java:484) "org.eclipse.jdt.internal.ui.text.JavaReconciler" daemon prio=2 tid=0xe582b50 nid=0xac0 waiting on monitor [0xec7f00 ] at java.lang.Object.wait(Native Method) at org.eclipse.jface.text.reconciler.AbstractReconciler$BackgroundThread.run (AbstractReconciler.java:161) "Java indexing" daemon prio=4 tid=0xe208c58 nid=0x338 waiting on monitor [0xec3f000..0xec3fdbc] at java.lang.Object.wait(Native Method) at java.lang.Object.wait(Object.java:420) at org.eclipse.jdt.internal.core.search.processing.JobManager.run (JobManager.java:350) at java.lang.Thread.run(Thread.java:484) "Signal Dispatcher" daemon prio=10 tid=0x8f9190 nid=0x420 waiting on monitor [0..0] "Finalizer" daemon prio=9 tid=0xe080b70 nid=0xbb0 waiting on monitor [0xe33f000..0xe33fdbc] at java.lang.Object.wait(Native Method) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:108) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:123) at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:162) "Reference Handler" daemon prio=10 tid=0x8f4ec8 nid=0x960 waiting on monitor [0xe2ff000..0xe2ffdbc] at java.lang.Object.wait(Native Method) at java.lang.Object.wait(Object.java:420) at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:110) "main" prio=5 tid=0x342c8 nid=0xbe8 waiting on monitor [0x7e000..0x7fc34] at java.lang.Object.wait(Native Method) at java.lang.Object.wait(Object.java:420) at org.eclipse.core.internal.utils.Semaphore.acquire(Semaphore.java:24) at org.eclipse.core.resources.WorkspaceLock.acquire (WorkspaceLock.java:49) at org.eclipse.ui.internal.UIWorkspaceLock.acquire (UIWorkspaceLock.java:46) at org.eclipse.core.internal.resources.WorkManager.checkIn (WorkManager.java:79) at org.eclipse.core.internal.resources.Workspace.prepareOperation (Workspace.java:1558) at org.eclipse.core.internal.resources.Marker.delete(Marker.java:61) at org.eclipse.jdt.internal.core.JavaProject.flushClasspathProblemMarkers (JavaProject.java:955) at org.eclipse.jdt.internal.core.JavaProject.getResolvedClasspath (JavaProject.java:1511) at org.eclipse.jdt.internal.core.JavaProject.getResolvedClasspath (JavaProject.java:1476) at org.eclipse.jdt.internal.core.JavaProject.generateInfos (JavaProject.java:982) at org.eclipse.jdt.internal.core.Openable.buildStructure (Openable.java:72) at org.eclipse.jdt.internal.core.Openable.openWhenClosed (Openable.java:399) at org.eclipse.jdt.internal.core.JavaProject.openWhenClosed (JavaProject.java:1872) at org.eclipse.jdt.internal.core.JavaElement.openHierarchy (JavaElement.java:490) at org.eclipse.jdt.internal.core.JavaElement.getElementInfo (JavaElement.java:312) at org.eclipse.jdt.internal.core.JavaElement.getChildren (JavaElement.java:254) at org.eclipse.jdt.internal.core.Openable.hasChildren (Openable.java:275) at org.eclipse.jdt.ui.StandardJavaElementContentProvider.hasChildren (StandardJavaElementContentProvider.java at org.eclipse.jface.viewers.AbstractTreeViewer.isExpandable (AbstractTreeViewer.java:1049) at org.eclipse.jface.viewers.AbstractTreeViewer.updatePlus (AbstractTreeViewer.java:1461) at org.eclipse.jface.viewers.AbstractTreeViewer.updateChildren (AbstractTreeViewer.java:1401) at org.eclipse.jface.viewers.AbstractTreeViewer.internalRefreshStruct (AbstractTreeViewer.java:960) at org.eclipse.jface.viewers.AbstractTreeViewer.internalRefresh (AbstractTreeViewer.java:940) at org.eclipse.jface.viewers.AbstractTreeViewer.internalRefresh (AbstractTreeViewer.java:911) at org.eclipse.jface.viewers.StructuredViewer$8.run (StructuredViewer.java:886) at org.eclipse.jface.viewers.StructuredViewer.preservingSelection (StructuredViewer.java:801) at org.eclipse.jface.viewers.StructuredViewer.refresh (StructuredViewer.java:884) at org.eclipse.jdt.internal.ui.packageview.PackageExplorerContentProvider$3.run (PackageExplorerContentProvid at org.eclipse.jdt.internal.ui.packageview.PackageExplorerContentProvider$7.run (PackageExplorerContentProvid at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages (Synchronizer.java:98) at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:2011) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:1745) at org.eclipse.jface.operation.ModalContext$ModalContextThread.block (ModalContext.java:136) at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:261) at org.eclipse.jface.wizard.WizardDialog.run(WizardDialog.java:758) at org.eclipse.pde.internal.ui.wizards.imports.PluginImportWizard.performFinish (PluginImportWizard.java:143) at org.eclipse.jface.wizard.WizardDialog.finishPressed (WizardDialog.java:608) at org.eclipse.jface.wizard.WizardDialog.buttonPressed (WizardDialog.java:321) at org.eclipse.jface.dialogs.Dialog$1.widgetSelected(Dialog.java:423) at org.eclipse.swt.widgets.TypedListener.handleEvent (TypedListener.java:89) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:81) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:848) at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:2034) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:1741) at org.eclipse.jface.window.Window.runEventLoop(Window.java:583) at org.eclipse.jface.window.Window.open(Window.java:563) at org.eclipse.ui.actions.ImportResourcesAction.run (ImportResourcesAction.java:96) at org.eclipse.jface.action.Action.runWithEvent(Action.java:842) at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection (ActionContributionItem.java:526) at org.eclipse.jface.action.ActionContributionItem.access$4 (ActionContributionItem.java:480) at org.eclipse.jface.action.ActionContributionItem$6.handleEvent (ActionContributionItem.java:452) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:81) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:848) at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:2034) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:1741) at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1402) at org.eclipse.ui.internal.Workbench.run(Workbench.java:1385) at org.eclipse.core.internal.boot.InternalBootLoader.run (InternalBootLoader.java:845) at org.eclipse.core.boot.BootLoader.run(BootLoader.java:461) at java.lang.reflect.Method.invoke(Native Method) at org.eclipse.core.launcher.Main.basicRun(Main.java:291) at org.eclipse.core.launcher.Main.run(Main.java:747) at org.eclipse.core.launcher.Main.main(Main.java:583) "VM Thread" prio=5 tid=0x3faa8 nid=0xf68 runnable "VM Periodic Task Thread" prio=10 tid=0x8f7ee0 nid=0x990 waiting on monitor "Suspend Checker Thread" prio=10 tid=0x8f8800 nid=0xd7c runnable
Looking at the stack trace and reading the code leads to the following explanation: Main thread: - active event loop due to modal context thread - receives async runnable posted by package explorer content provider to update UI. - aquires Java model lock (singleton JavaModelManager) - tries to aquire workspace lock Modal Context thread: - executes runnable to import plug-ins - aquires workspace lock - imports plug-ins, which triggers Java Model delta, which causes package explorer updates - tries to aquire Java model lock. We haven't seen this in the past. Philippe, has Java core changed recently regarding lock aquiring ? Moving to JDT/Core for comments.
The main thread acquires the Java model lock in JavaElement.getElementInfo().
Known remaining issue in JavaModel, fix is in progress, not yet fully tested though. Problem is that project opening may create classpath problem markers, inside the model lock which is troublesome. *** This bug has been marked as a duplicate of 37274 ***