| Summary: | Deadlock when trying to save compare editor (EGit Merge Tool) | ||||||
|---|---|---|---|---|---|---|---|
| Product: | [Eclipse Project] Platform | Reporter: | Markus Keller <markus.kell.r> | ||||
| Component: | Runtime | Assignee: | platform-runtime-inbox <platform-runtime-inbox> | ||||
| Status: | CLOSED DUPLICATE | QA Contact: | |||||
| Severity: | major | ||||||
| Priority: | P3 | CC: | juan.cadavid | ||||
| Version: | 4.5 | ||||||
| Target Milestone: | --- | ||||||
| Hardware: | PC | ||||||
| OS: | Windows 7 | ||||||
| Whiteboard: | |||||||
| Attachments: |
|
||||||
*** This bug has been marked as a duplicate of bug 456758 *** |
Created attachment 250190 [details] Stackdump Eclipse SDK I20150120-0800 EGit 3.6.2.201501042013 Using EGit, I tried to revert a commit, but I ran into conflicts. I opened the EGit Merge Tool, resolved the conflict, and tried to save (Ctrl+S in the compare editor). The result was a deadlock where a modal "Progress Information" dialog was shown with message "The user operation is waiting for background work to complete". But the Cancel button was disabled and neither the dialog's close box nor the Esc key does anything. Using an external debugger, I saw that the ModalContext thread called JobManager.beginRule(..), and the schedulingRule was the file I just tried to save. The main thread already holds the workspace lock in Workspace.run(IWorkspaceRunnable, ISchedulingRule, int, IProgressMonitor) line: 2313 and is caught in an endless readAndDispatch loop around ModalContext$ModalContextThread.block() line: 172 I think I've run into this before a few weeks ago, but I don't remember such a deadlock from older releases (Luna and before). Workaround if you have an OSGi console (this loses the merged document, but at least lets you continue): osgi> threads stop ModalContext Relevant stacktraces: "ModalContext" prio=6 tid=0x0000000016e76000 nid=0x5f8 in Object.wait() [0x00000000261be000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) at java.lang.Object.wait(Object.java:503) at org.eclipse.core.internal.jobs.ThreadJob.waitForRun(ThreadJob.java:270) - locked <0x00000007c5b3c310> (a java.lang.Object) at org.eclipse.core.internal.jobs.ThreadJob.joinRun(ThreadJob.java:197) at org.eclipse.core.internal.jobs.ImplicitJobs.begin(ImplicitJobs.java:92) at org.eclipse.core.internal.jobs.JobManager.beginRule(JobManager.java:299) at org.eclipse.core.internal.resources.WorkManager.checkIn(WorkManager.java:118) at org.eclipse.core.internal.resources.Workspace.prepareOperation(Workspace.java:2251) at org.eclipse.core.internal.resources.File.setContents(File.java:359) at org.eclipse.core.internal.resources.File.setContents(File.java:470) at org.eclipse.egit.ui.internal.revision.ResourceEditableRevision$1.run(ResourceEditableRevision.java:60) at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:119) "main" prio=6 tid=0x0000000002748000 nid=0x235c runnable [0x0000000002afb000] java.lang.Thread.State: RUNNABLE at org.eclipse.swt.internal.win32.OS.WaitMessage(Native Method) at org.eclipse.swt.widgets.Display.sleep(Display.java:4720) at org.eclipse.jface.operation.ModalContext$ModalContextThread.block(ModalContext.java:173) at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:387) at org.eclipse.jface.dialogs.ProgressMonitorDialog.run(ProgressMonitorDialog.java:500) at org.eclipse.ui.internal.progress.ProgressMonitorJobsDialog.run(ProgressMonitorJobsDialog.java:284) at org.eclipse.ui.internal.progress.ProgressManager.run(ProgressManager.java:1190) at org.eclipse.compare.internal.CompareContainer.run(CompareContainer.java:80) at org.eclipse.egit.ui.internal.revision.ResourceEditableRevision.setContent(ResourceEditableRevision.java:56) at org.eclipse.compare.internal.MergeViewerContentProvider.saveLeftContent(MergeViewerContentProvider.java:132) at org.eclipse.compare.contentmergeviewer.ContentMergeViewer.flushLeftSide(ContentMergeViewer.java:1215) at org.eclipse.compare.contentmergeviewer.TextMergeViewer.flushLeftSide(TextMergeViewer.java:5110) at org.eclipse.compare.contentmergeviewer.TextMergeViewer.flushContent(TextMergeViewer.java:5134) at org.eclipse.compare.contentmergeviewer.ContentMergeViewer.flush(ContentMergeViewer.java:1186) at org.eclipse.compare.CompareEditorInput.flushViewer(CompareEditorInput.java:1266) at org.eclipse.compare.CompareEditorInput.flushViewers(CompareEditorInput.java:1235) at org.eclipse.compare.CompareEditorInput.saveChanges(CompareEditorInput.java:1220) at org.eclipse.compare.internal.CompareEditor$5.execute(CompareEditor.java:542) at org.eclipse.ui.actions.WorkspaceModifyOperation$1.run(WorkspaceModifyOperation.java:108) at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2313) at org.eclipse.ui.actions.WorkspaceModifyOperation.run(WorkspaceModifyOperation.java:130) - locked <0x00000007d97ebc10> (a org.eclipse.compare.internal.CompareEditor$5) at org.eclipse.compare.internal.CompareEditor.doSave(CompareEditor.java:550) at org.eclipse.compare.internal.CompareEditor$CompareSaveable.doSave(CompareEditor.java:690) at org.eclipse.ui.Saveable.doSave(Saveable.java:216) at org.eclipse.ui.internal.SaveableHelper.doSaveModel(SaveableHelper.java:355) at org.eclipse.ui.internal.SaveableHelper$3.run(SaveableHelper.java:199) at org.eclipse.ui.internal.SaveableHelper$5.run(SaveableHelper.java:283) at org.eclipse.jface.operation.ModalContext.runInCurrentThread(ModalContext.java:463) at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:371) at org.eclipse.ui.internal.WorkbenchWindow$13.run(WorkbenchWindow.java:2139) at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70) at org.eclipse.ui.internal.WorkbenchWindow.run(WorkbenchWindow.java:2135) at org.eclipse.ui.internal.SaveableHelper.runProgressMonitorOperation(SaveableHelper.java:291) at org.eclipse.ui.internal.SaveableHelper.runProgressMonitorOperation(SaveableHelper.java:269) at org.eclipse.ui.internal.SaveableHelper.saveModels(SaveableHelper.java:211) at org.eclipse.ui.internal.SaveableHelper.savePart(SaveableHelper.java:146) at org.eclipse.ui.internal.WorkbenchPage.saveSaveable(WorkbenchPage.java:3793) at org.eclipse.ui.internal.WorkbenchPage.saveEditor(WorkbenchPage.java:3807) at org.eclipse.ui.internal.handlers.SaveHandler.execute(SaveHandler.java:54) at org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:295) at org.eclipse.ui.internal.handlers.E4HandlerProxy.execute(E4HandlerProxy.java:90) at sun.reflect.GeneratedMethodAccessor55.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:55) at org.eclipse.e4.core.internal.di.InjectorImpl.invokeUsingClass(InjectorImpl.java:247) at org.eclipse.e4.core.internal.di.InjectorImpl.invoke(InjectorImpl.java:229) at org.eclipse.e4.core.contexts.ContextInjectionFactory.invoke(ContextInjectionFactory.java:132) at org.eclipse.e4.core.commands.internal.HandlerServiceHandler.execute(HandlerServiceHandler.java:149) at org.eclipse.core.commands.Command.executeWithChecks(Command.java:499) at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:508) at org.eclipse.e4.core.commands.internal.HandlerServiceImpl.executeHandler(HandlerServiceImpl.java:210) at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher.executeCommand(KeyBindingDispatcher.java:286) at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher.press(KeyBindingDispatcher.java:507) at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher.processKeyEvent(KeyBindingDispatcher.java:558) at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher.filterKeySequenceBindings(KeyBindingDispatcher.java:378) at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher.access$0(KeyBindingDispatcher.java:324) at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher$KeyDownFilter.handleEvent(KeyBindingDispatcher.java:86) ...