Bug 38398 - Deadlock importing binaries
Summary: Deadlock importing binaries
Status: RESOLVED DUPLICATE of bug 37274
Alias: None
Product: JDT
Classification: Eclipse Project
Component: Core (show other bugs)
Version: 2.1   Edit
Hardware: PC Windows XP
: P3 critical (vote)
Target Milestone: ---   Edit
Assignee: JDT-Core-Inbox CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2003-06-03 22:03 EDT by Nick Edgar CLA
Modified: 2003-06-04 06:33 EDT (History)
1 user (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Nick Edgar CLA 2003-06-03 22:03:31 EDT
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
Comment 1 Dirk Baeumer CLA 2003-06-04 06:18:51 EDT
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.
Comment 2 Dirk Baeumer CLA 2003-06-04 06:27:51 EDT
The main thread acquires the Java model lock in JavaElement.getElementInfo().
Comment 3 Philipe Mulet CLA 2003-06-04 06:33:19 EDT
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 ***