Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.

Bug 360298

Summary: Deadlock due to JdtJavaTypeReferenceService's listener
Product: z_Archived Reporter: Konstantin Komissarchik <konstantin>
Component: SapphireAssignee: Konstantin Komissarchik <konstantin>
Status: CLOSED FIXED QA Contact:
Severity: major    
Priority: P3    
Version: unspecified   
Target Milestone: ---   
Hardware: All   
OS: All   
Whiteboard:

Description Konstantin Komissarchik CLA 2011-10-07 21:01:56 EDT
The following deadlock was encountered during workspace start in an adopter product. The issue seems to be that JDT is holding resource locks when notifying listeners of changes to the java type system. The solution is to start a thread to do property refresh instead of doing the refresh inline.


"org.eclipse.wst.sse.ui.internal.reconcile.StructuredRegionProcessor" daemon prio=2 tid=0x04440400 nid=0x1cb8 waiting for monitor entry [0x063fe000]
   java.lang.Thread.State: BLOCKED (on object monitor)
	at oracle.eclipse.tools.adf.controller.model.internal.InputParameterDefinition.refreshProperty(InputParameterDefinition.java:421)
	- waiting to lock <0x12bdc500> (a oracle.eclipse.tools.adf.controller.model.internal.TaskFlowFile)
	at org.eclipse.sapphire.modeling.ModelElement.refresh(ModelElement.java:457)
	at org.eclipse.sapphire.modeling.ModelElement.refresh(ModelElement.java:444)
	at org.eclipse.sapphire.java.jdt.internal.JdtJavaTypeReferenceService$1.elementChanged(JdtJavaTypeReferenceService.java:73)
	at org.eclipse.jdt.internal.core.DeltaProcessor$4.run(DeltaProcessor.java:1670)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
	at org.eclipse.jdt.internal.core.DeltaProcessor.notifyListeners(DeltaProcessor.java:1660)
	at org.eclipse.jdt.internal.core.DeltaProcessor.firePostChangeDelta(DeltaProcessor.java:1494)
	at org.eclipse.jdt.internal.core.DeltaProcessor.fire(DeltaProcessor.java:1470)
	at org.eclipse.jdt.internal.core.DeltaProcessor.resourceChanged(DeltaProcessor.java:2082)
	at org.eclipse.jdt.internal.core.DeltaProcessingState.resourceChanged(DeltaProcessingState.java:470)
	at org.eclipse.core.internal.events.NotificationManager$1.run(NotificationManager.java:291)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
	at org.eclipse.core.internal.events.NotificationManager.notify(NotificationManager.java:285)
	at org.eclipse.core.internal.events.NotificationManager.broadcastChanges(NotificationManager.java:149)
	at org.eclipse.core.internal.resources.Workspace.broadcastPostChange(Workspace.java:395)
	at org.eclipse.core.internal.resources.Workspace.endOperation(Workspace.java:1530)
	at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2353)
	at org.eclipse.jdt.internal.core.JavaModelOperation.runOperation(JavaModelOperation.java:793)
	at org.eclipse.jdt.internal.core.JavaModelManager.getClasspathContainer(JavaModelManager.java:1880)
	at org.eclipse.jdt.core.JavaCore.getClasspathContainer(JavaCore.java:2798)
	at org.eclipse.jdt.internal.core.JavaProject.resolveClasspath(JavaProject.java:2674)
	at org.eclipse.jdt.internal.core.JavaProject.resolveClasspath(JavaProject.java:2838)
	at org.eclipse.jdt.internal.core.JavaProject.getResolvedClasspath(JavaProject.java:1943)
	at org.eclipse.jdt.internal.core.JavaProject.buildStructure(JavaProject.java:461)
	at org.eclipse.jdt.internal.core.Openable.generateInfos(Openable.java:258)
	at org.eclipse.jdt.internal.core.JavaElement.openWhenClosed(JavaElement.java:518)
	at org.eclipse.jdt.internal.core.JavaElement.getElementInfo(JavaElement.java:255)
	at org.eclipse.jdt.internal.core.JavaElement.getElementInfo(JavaElement.java:241)
	at org.eclipse.jdt.internal.core.JavaElement.getChildren(JavaElement.java:196)
	at org.eclipse.jdt.internal.core.JavaProject.getPackageFragmentRoots(JavaProject.java:1831)
	at org.eclipse.jst.j2ee.internal.project.J2EEProjectUtilities.getSourceContainers(J2EEProjectUtilities.java:810)
	at org.eclipse.jst.j2ee.internal.validation.ProjectValidationHelper.getCachedSourceContainers(ProjectValidationHelper.java:76)
	at org.eclipse.jst.j2ee.internal.validation.ProjectValidationHelper.getSourceContainers(ProjectValidationHelper.java:87)
	at org.eclipse.wst.validation.internal.ValidatorMetaData.checkIfValidSourceFile(ValidatorMetaData.java:341)
	at org.eclipse.wst.validation.internal.ValidatorMetaData.isApplicableTo(ValidatorMetaData.java:311)
	at org.eclipse.wst.validation.internal.ValidatorMetaData.isApplicableTo(ValidatorMetaData.java:302)
	at org.eclipse.wst.validation.internal.ValidatorMetaData.isApplicableTo(ValidatorMetaData.java:287)
	at org.eclipse.wst.validation.Validator$V1.shouldValidate(Validator.java:734)
	at org.eclipse.wst.validation.Validator.shouldValidate(Validator.java:320)
	at org.eclipse.wst.validation.Friend.shouldValidate(Friend.java:50)
	at org.eclipse.wst.validation.internal.ValManager.accept(ValManager.java:800)
	at org.eclipse.wst.validation.internal.DisabledValidatorManager$DisabledValidationFinder.findDisabledValidatorsFor(DisabledValidatorManager.java:109)
	at org.eclipse.wst.validation.internal.DisabledValidatorManager.getDisabledValidatorsFor(DisabledValidatorManager.java:62)
	at org.eclipse.wst.validation.ValidationFramework.getDisabledValidatorsFor(ValidationFramework.java:238)
	at org.eclipse.wst.sse.ui.internal.reconcile.validator.ValidatorStrategy.reconcile(ValidatorStrategy.java:205)
	at org.eclipse.wst.sse.ui.internal.reconcile.DocumentRegionProcessor.process(DocumentRegionProcessor.java:321)
	at org.eclipse.wst.sse.ui.internal.reconcile.StructuredRegionProcessor.process(StructuredRegionProcessor.java:258)
	at org.eclipse.wst.sse.ui.internal.reconcile.DirtyRegionProcessor$BackgroundThread.run(DirtyRegionProcessor.java:697)


"main" prio=6 tid=0x009c6c00 nid=0x1f10 in Object.wait() [0x0013e000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	- waiting on <0x07055940> (a org.eclipse.core.internal.jobs.Semaphore)
	at org.eclipse.core.internal.jobs.Semaphore.acquire(Semaphore.java:39)
	- locked <0x07055940> (a org.eclipse.core.internal.jobs.Semaphore)
	at org.eclipse.core.internal.jobs.OrderedLock.doAcquire(OrderedLock.java:176)
	at org.eclipse.core.internal.jobs.OrderedLock.acquire(OrderedLock.java:110)
	at org.eclipse.core.internal.jobs.OrderedLock.acquire(OrderedLock.java:84)
	at org.eclipse.core.internal.resources.WorkManager.checkIn(WorkManager.java:119)
	at org.eclipse.core.internal.resources.Workspace.prepareOperation(Workspace.java:2282)
	at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2339)
	at org.eclipse.jdt.internal.core.JavaModelOperation.runOperation(JavaModelOperation.java:793)
	at org.eclipse.jdt.internal.core.JavaModelManager.getClasspathContainer(JavaModelManager.java:1880)
	at org.eclipse.jdt.core.JavaCore.getClasspathContainer(JavaCore.java:2798)
	at org.eclipse.jdt.internal.core.JavaProject.resolveClasspath(JavaProject.java:2674)
	at org.eclipse.jdt.internal.core.JavaProject.resolveClasspath(JavaProject.java:2838)
	at org.eclipse.jdt.internal.core.JavaProject.getResolvedClasspath(JavaProject.java:1943)
	at org.eclipse.jdt.internal.core.JavaProject.computePackageFragmentRoots(JavaProject.java:636)
	at org.eclipse.jdt.internal.core.JavaProject.computePackageFragmentRoots(JavaProject.java:705)
	at org.eclipse.jdt.internal.core.JavaProject.computePackageFragmentRoots(JavaProject.java:669)
	at org.eclipse.jdt.internal.core.JavaProject.getAllPackageFragmentRoots(JavaProject.java:1413)
	at org.eclipse.jdt.internal.core.JavaProjectElementInfo.getProjectCache(JavaProjectElementInfo.java:206)
	at org.eclipse.jdt.internal.core.JavaProjectElementInfo.newNameLookup(JavaProjectElementInfo.java:290)
	at org.eclipse.jdt.internal.core.JavaProject.newNameLookup(JavaProject.java:2310)
	at org.eclipse.jdt.internal.core.JavaProject.newNameLookup(JavaProject.java:2320)
	at org.eclipse.jdt.internal.core.JavaProject.findType(JavaProject.java:1342)
	at org.eclipse.jdt.internal.core.JavaProject.findType(JavaProject.java:1249)
	at org.eclipse.sapphire.java.jdt.internal.JdtJavaTypeReferenceService.resolve(JdtJavaTypeReferenceService.java:92)
	at org.eclipse.sapphire.java.JavaTypeReferenceService.resolve(JavaTypeReferenceService.java:1)
	at org.eclipse.sapphire.modeling.ReferenceValue.resolve(ReferenceValue.java:49)
	at org.eclipse.sapphire.java.internal.JavaTypeValidationService.validate(JavaTypeValidationService.java:98)
	at org.eclipse.sapphire.modeling.Value.initValidation(Value.java:74)
	at org.eclipse.sapphire.modeling.Value.init(Value.java:60)
	at oracle.eclipse.tools.adf.controller.model.internal.ManagedBean.refreshProperty(ManagedBean.java:486)
	- locked <0x12bdc500> (a oracle.eclipse.tools.adf.controller.model.internal.TaskFlowFile)
	at org.eclipse.sapphire.modeling.ModelElement.refresh(ModelElement.java:457)
	at org.eclipse.sapphire.modeling.ModelElement.refresh(ModelElement.java:450)
	at oracle.eclipse.tools.adf.controller.model.internal.ManagedBean.getManagedBeanClass(ManagedBean.java:201)
	- locked <0x12bdc500> (a oracle.eclipse.tools.adf.controller.model.internal.TaskFlowFile)
	at oracle.eclipse.tools.adf.controller.model.internal.ManagedBean.read(ManagedBean.java:633)
	at org.eclipse.sapphire.modeling.ModelElement.read(ModelElement.java:233)
	at org.eclipse.sapphire.modeling.ModelElement.refreshValidationResult(ModelElement.java:880)
	at org.eclipse.sapphire.modeling.ModelElement.validate(ModelElement.java:862)
	at org.eclipse.sapphire.modeling.ModelElementList.refreshValidationResult(ModelElementList.java:212)
	at org.eclipse.sapphire.modeling.ModelElementList.refresh(ModelElementList.java:189)
	at org.eclipse.sapphire.modeling.ModelElementList.init(ModelElementList.java:63)
	at oracle.eclipse.tools.adf.controller.model.internal.TaskFlow.refreshProperty(TaskFlow.java:1135)
	- locked <0x12bdc500> (a oracle.eclipse.tools.adf.controller.model.internal.TaskFlowFile)
	at org.eclipse.sapphire.modeling.ModelElement.refresh(ModelElement.java:457)
	at org.eclipse.sapphire.modeling.ModelElement.refresh(ModelElement.java:450)
	at oracle.eclipse.tools.adf.controller.model.internal.TaskFlow.getManagedBeans(TaskFlow.java:406)
	- locked <0x12bdc500> (a oracle.eclipse.tools.adf.controller.model.internal.TaskFlowFile)
	at oracle.eclipse.tools.adf.controller.model.internal.TaskFlow.read(TaskFlow.java:1580)
	at org.eclipse.sapphire.modeling.ModelElement.read(ModelElement.java:254)
	at org.eclipse.sapphire.modeling.ModelElement.refreshValidationResult(ModelElement.java:884)
	at org.eclipse.sapphire.modeling.ModelElement.validate(ModelElement.java:862)
	at org.eclipse.sapphire.modeling.ModelElementHandle.refreshValidationState(ModelElementHandle.java:285)
	at org.eclipse.sapphire.modeling.ModelElementHandle.refreshInternal(ModelElementHandle.java:249)
	- locked <0x12bd5068> (a org.eclipse.sapphire.modeling.ModelElementHandle)
	at org.eclipse.sapphire.modeling.ModelElementHandle.init(ModelElementHandle.java:50)
	at oracle.eclipse.tools.adf.controller.model.internal.TaskFlowFile.refreshProperty(TaskFlowFile.java:130)
	- locked <0x12bdc500> (a oracle.eclipse.tools.adf.controller.model.internal.TaskFlowFile)
	at org.eclipse.sapphire.modeling.ModelElement.refresh(ModelElement.java:457)
	at org.eclipse.sapphire.modeling.ModelElement.refresh(ModelElement.java:450)
	at oracle.eclipse.tools.adf.controller.model.internal.TaskFlowFile.getTaskFlow(TaskFlowFile.java:83)
	- locked <0x12bdc500> (a oracle.eclipse.tools.adf.controller.model.internal.TaskFlowFile)
	at oracle.eclipse.tools.adf.controller.ui.editor.TaskFlowEditor.createModel(TaskFlowEditor.java:67)
	at org.eclipse.sapphire.ui.SapphireEditor.addPages(SapphireEditor.java:356)
	at org.eclipse.ui.forms.editor.FormEditor.createPages(FormEditor.java:138)
	at org.eclipse.ui.part.MultiPageEditorPart.createPartControl(MultiPageEditorPart.java:348)
	at org.eclipse.ui.internal.EditorReference.createPartHelper(EditorReference.java:670)
	at org.eclipse.ui.internal.EditorReference.createPart(EditorReference.java:465)
	at org.eclipse.ui.internal.WorkbenchPartReference.getPart(WorkbenchPartReference.java:595)
	at org.eclipse.ui.internal.EditorAreaHelper.setVisibleEditor(EditorAreaHelper.java:271)
	at org.eclipse.ui.internal.EditorManager.setVisibleEditor(EditorManager.java:1459)
	at org.eclipse.ui.internal.EditorManager$5.runWithException(EditorManager.java:972)
	at org.eclipse.ui.internal.StartupThreading$StartupRunnable.run(StartupThreading.java:31)
	at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
	at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:135)
	- locked <0x12611468> (a org.eclipse.swt.widgets.RunnableLock)
	at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4140)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3757)
	at org.eclipse.ui.application.WorkbenchAdvisor.openWindows(WorkbenchAdvisor.java:803)
	at org.eclipse.ui.internal.Workbench$33.runWithException(Workbench.java:1595)
	at org.eclipse.ui.internal.StartupThreading$StartupRunnable.run(StartupThreading.java:31)
	at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
	at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:135)
	- locked <0x11f4a1d0> (a org.eclipse.swt.widgets.RunnableLock)
	at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4140)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3757)
	at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2604)
	at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2494)
	at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:674)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:667)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
	at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:123)
	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
	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.equinox.launcher.Main.invokeFramework(Main.java:622)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1410)
Comment 1 Konstantin Komissarchik CLA 2011-10-07 21:07:35 EDT
Fixed in 0.3.1 and 0.4 streams.
Comment 2 Konstantin Komissarchik CLA 2011-10-10 11:34:56 EDT
Fix verified in adopter product.