Bug 3221 - JM - Deadlock while saving in Editor (1GAJ67W)
Summary: JM - Deadlock while saving in Editor (1GAJ67W)
Status: RESOLVED WORKSFORME
Alias: None
Product: JDT
Classification: Eclipse Project
Component: Core (show other bugs)
Version: 2.0   Edit
Hardware: All Windows 2000
: P4 normal (vote)
Target Milestone: 2.0 M4   Edit
Assignee: Philipe Mulet CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2001-10-10 22:51 EDT by Dirk Baeumer CLA
Modified: 2002-03-14 12:48 EST (History)
0 users

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Dirk Baeumer CLA 2001-10-10 22:51:31 EDT
Make sure autobuild is enabled.
	- load Junit
	- load TestCase.java
	- select fName in Outliner
	- search for references.
	- remove "{" from line 	"public TestCase(String name) {"
	- Save

Full thread dump Classic VM (JDK-1.2.2_007, native threads):
    "com.ibm.jdt.ui.text.java.JavaReconciler" (TID:0x14180a8, sys_thread_t:0x741fe48, state:CW, native ID:0x5f4) prio=1
        at java.lang.Object.wait(Native Method)
        at java.lang.Object.wait(Object.java, Compiled Code)
        at com.ibm.eclipse.internal.core.resources.WorkManager.checkIn(WorkManager.java, Compiled Code)
        at com.ibm.eclipse.internal.core.resources.Workspace.beginOperation(Workspace.java, Compiled Code)
        at com.ibm.eclipse.internal.core.resources.Resource.createMarker(Resource.java:275)
        at com.ibm.jdt.internal.core.WorkingCopy.reconcile(WorkingCopy.java, Compiled Code)
        at com.ibm.jdt.internal.core.Reconciler.reconcile(Reconciler.java:49)
        at com.ibm.jdt.ui.text.java.JavaReconcilingStrategy.reconcile(JavaReconcilingStrategy.java:44)
        at com.ibm.jdt.ui.text.java.JavaReconcilingStrategy.reconcile(JavaReconcilingStrategy.java:53)
        at com.ibm.jdt.ui.text.java.JavaReconciler.process(JavaReconciler.java:24)
        at com.ibm.jface.text.reconciler.Reconciler$BackgroundThread.run(Reconciler.java, Compiled Code)
    "Java indexing: com.ibm.jdt.internal.core.search.indexing.IndexManager" (TID:0x1487640, sys_thread_t:0x5c7b6a0, state:CW, native ID:0x10c) prio=5
        at java.lang.Thread.sleep(Native Method)
        at com.ibm.jdt.internal.core.search.processing.JobManager.run(JobManager.java, Compiled Code)
        at java.lang.Thread.run(Thread.java:479)
    "SymcJIT-LazyCompilation-0" (TID:0x14ae668, sys_thread_t:0x4a0a758, state:CW, native ID:0x1f0) prio=1
        at SymantecJITCompilationThread.DoCompileMethod(Native Method)
        at SymantecJITCompilationThread.run(JITcompilationthread.java, Compiled Code)
    "SymcJIT-LazyCompilation-PA" (TID:0x14ae630, sys_thread_t:0x4a0a4c0, state:CW, native ID:0x5c0) prio=10
        at java.lang.Object.wait(Native Method)
        at java.lang.Object.wait(Object.java, Compiled Code)
        at SymantecJITCompilationThread.run(JITcompilationthread.java, Compiled Code)
    "Finalizer" (TID:0x14a9320, sys_thread_t:0x4953220, state:CW, native ID:0x5d4) prio=8
        at java.lang.Object.wait(Native Method)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java, Compiled Code)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java, Compiled Code)
        at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:174)
    "Reference Handler" (TID:0x14a93b0, sys_thread_t:0x49517f8, state:CW, native ID:0x184) prio=10
        at java.lang.Object.wait(Native Method)
        at java.lang.Object.wait(Object.java, Compiled Code)
        at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:114)
    "Signal dispatcher" (TID:0x14a93e0, sys_thread_t:0x494eff8, state:R, native ID:0x1a8) prio=5
    "main" (TID:0x14a91e0, sys_thread_t:0x2f3c08, state:MW, native ID:0x614) prio=5
        at com.ibm.jdt.internal.ui.javaeditor.CompilationUnitDocumentProvider.doSaveDocument(CompilationUnitDocumentProvider.java:208)
        at com.ibm.eclipse.ui.editors.text.AbstractDocumentProvider.saveDocument(AbstractDocumentProvider.java:253)
        at com.ibm.eclipse.ui.editors.text.AbstractTextEditor$5.execute(AbstractTextEditor.java:472)
        at com.ibm.eclipse.ui.actions.WorkbenchModifyOperation$1.run(WorkbenchModifyOperation.java:47)
        at com.ibm.eclipse.internal.core.resources.Workspace.run(Workspace.java:1056)
        at com.ibm.eclipse.ui.actions.WorkbenchModifyOperation.run(WorkbenchModifyOperation.java:55)
        at com.ibm.eclipse.ui.editors.text.AbstractTextEditor.doSave(AbstractTextEditor.java:479)
        at com.ibm.eclipse.internal.ui.EditorManager.saveEditor(EditorManager.java:237)
        at com.ibm.eclipse.internal.ui.WorkbenchPage.saveEditor(WorkbenchPage.java:725)
        at com.ibm.eclipse.internal.ui.SaveAction.run(SaveAction.java:31)
        at com.ibm.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:324)
        at com.ibm.jface.action.ActionContributionItem.handleWidgetEvent(ActionContributionItem.java, Compiled Code)
        at com.ibm.jface.action.ActionContributionItem.access$0(ActionContributionItem.java, Compiled Code)
        at com.ibm.jface.action.ActionContributionItem$ActionListener.handleEvent(ActionContributionItem.java, Compiled Code)
        at com.ibm.swt.widgets.EventTable.sendEvent(EventTable.java, Compiled Code)
        at com.ibm.swt.widgets.Widget.notifyListener(Widget.java, Compiled Code)
        at com.ibm.swt.widgets.Display.runDeferredEvents(Display.java, Compiled Code)
        at com.ibm.swt.widgets.Display.readAndDispatch(Display.java, Compiled Code)
        at com.ibm.eclipse.internal.ui.Workbench.runEventLoop(Workbench.java, Compiled Code)
        at com.ibm.eclipse.internal.ui.Workbench.run(Workbench.java:543)
        at com.ibm.eclipse.core.boot.BootLoader.run(BootLoader.java:909)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.ibm.eclipse.launcher.Main.basicRun(Main.java:61)
        at com.ibm.eclipse.launcher.Main.run(Main.java:217)
        at com.ibm.eclipse.launcher.NewMain.main(NewMain.java:32)
Monitor Cache Dump:
    java.lang.ref.ReferenceQueue$Lock@14A9338/14DED50: <unowned>
        Waiting to be notified:
            "Finalizer" (0x4953220)
    com.ibm.jdt.internal.core.WorkingCopy@1487FD8/19BC2F8: owner "com.ibm.jdt.ui.text.java.JavaReconciler" (0x741fe48) 1 entry
        Waiting to enter:
            "main" (0x2f3c08)
    com.ibm.eclipse.ui.editors.text.AbstractTextEditor$5@13B86F8/1DC0010: owner "main" (0x2f3c08) 1 entry
    java.lang.ref.Reference$Lock@14A93C0/14DE890: <unowned>
        Waiting to be notified:
            "Reference Handler" (0x49517f8)
    SymantecJITCompilationThread@14AE668/1506AF0: <unowned>
        Waiting to be notified:
            "SymcJIT-LazyCompilation-PA" (0x4a0a4c0)
    com.ibm.eclipse.internal.core.resources.WorkManager@14C92C8/15E19C0: <unowned>
        Waiting to be notified:
            "com.ibm.jdt.ui.text.java.JavaReconciler" (0x741fe48)
Registered Monitor Dump:
    SymcJIT Method Monitor: <unowned>
    SymcJIT Method Monitor: <unowned>
    SymcJIT Lazy Queue Lock: <unowned>
        Waiting to be notified:
            "SymcJIT-LazyCompilation-0" (0x4a0a758)
    SymcJIT Method Monitor: <unowned>
    SymcJIT Method List Monitor: <unowned>
    SymcJIT Lock: <unowned>
    utf8 hash table: <unowned>
    JNI pinning lock: <unowned>
    JNI global reference lock: <unowned>
    BinClass lock: <unowned>
    Class linking lock: <unowned>
    System class loader lock: <unowned>
    Code rewrite lock: <unowned>
    Heap lock: <unowned>
    Monitor cache lock: owner "Signal dispatcher" (0x494eff8) 1 entry
    Thread queue lock: owner "Signal dispatcher" (0x494eff8) 1 entry
    Monitor registry: owner "Signal dispatcher" (0x494eff8) 1 entry

NOTES:
EG (3/13/01 5:00:51 PM)
	commented out the code that creates transient markers and the problem went away

		/**
	 * @see IWorkingCopy
	 */
	public IMarker[] reconcile() throws JavaModelException {
		// create the delta builder (this remembers the current content of the cu)
		JavaElementDeltaBuilder deltaBuilder= new JavaElementDeltaBuilder(this);

		// update the element infos with the content of the working copy
		this.makeConsistent(null);

		// build the deltas
		deltaBuilder.buildDeltas();

		// fire the deltas
		boolean shouldFire= false;
		JavaModelManager manager= null;
		if (deltaBuilder.deletedDelta != null) {
			manager= (JavaModelManager) JavaModelManager.getJavaModelManager();
			if (deltaBuilder.deletedDelta.getAffectedChildren().length > 0) {
				manager.registerJavaModelDelta(deltaBuilder.deletedDelta);
				shouldFire= true;
			}
		}

		if (deltaBuilder.addedDelta != null) {
			if (manager == null)
				manager= (JavaModelManager) JavaModelManager.getJavaModelManager();
			if (deltaBuilder.addedDelta.getAffectedChildren().length > 0) {
				manager.registerJavaModelDelta(deltaBuilder.addedDelta);
				shouldFire= true;
			}
		}
		if (shouldFire)
			manager.fire();

		// report syntax problems
		/* REMOVED because of 1GAJ67W: ITPJUI:WIN2000 - Deadlock while saving in Editor
		try {
			WorkingCopyElementInfo info= (WorkingCopyElementInfo) JavaModelManager.getJavaModelManager().getInfo(this);
			IProblem[] problems= info.problems;
			int length;
			if (problems == null || (length= problems.length) == 0)
				return null;
			IMarker[] markers= new IMarker[length];
			for (int i= 0; i < length; i++) {
				IProblem problem= problems[i];
				IMarker marker= getOriginalElement().getUnderlyingResource().createMarker(IJavaModelMarker.TRANSIENT_PROBLEM);
				marker.setAttribute(IJavaModelMarker.ID, problem.getID());
				marker.setAttribute(IJavaModelMarker.CHAR_START, problem.getSourceStart());
				marker.setAttribute(IJavaModelMarker.CHAR_END, problem.getSourceEnd() + 1);
				marker.setAttribute(IJavaModelMarker.LINE_NUMBER, problem.getSourceLineNumber());
				// HACK for now: The final format is not fixed yet.
				marker.setAttribute(IMarker.LOCATION, "#" + problem.getSourceLineNumber());
				marker.setAttribute(IMarker.MESSAGE, problem.getMessage());
				marker.setAttribute(IMarker.PRIORITY, (problem.isWarning() ? IMarker.PRIORITY_LOW : IMarker.PRIORITY_HIGH));
				markers[i]= marker;
			}
			return markers;
		} catch (CoreException e) {
			throw new JavaModelException(e);
		}*/
		return new IMarker[0];
	}

EG (3/14/2001 6:26:04 AM)
	pls comment out the code as shown above for the March 15th drop
	Moving to ITPCORE

JBL (3/14/2001 3:14:33 PM)
	Also reported in 1GAJJ3A: ITPJUI:WINNT - Deadlock in Java Editor

JBL (3/15/2001 6:28:59 PM)
	Waiting on comments in PR above.

JBL (6/18/2001 2:52:07 PM)
	1GAJJ3A: ITPJUI:WINNT - Deadlock in Java Editor
	has been fixed.
	We should re-enable the above code.
Comment 1 DJ Houghton CLA 2001-10-23 23:51:53 EDT
PRODUCT VERSION:
	80 (self hosting)

Comment 2 Philipe Mulet CLA 2002-03-14 12:48:56 EST
Marker creation got removed, and instead IProblem are surfaced.
Closing