Bug 576339 - Intermittent Eclipse hang saving editor
Summary: Intermittent Eclipse hang saving editor
Status: NEW
Alias: None
Product: JDT
Classification: Eclipse Project
Component: UI (show other bugs)
Version: 4.22   Edit
Hardware: PC Windows 10
: P3 normal (vote)
Target Milestone: ---   Edit
Assignee: JDT-UI-Inbox CLA
QA Contact:
URL:
Whiteboard: stalebug
Keywords:
Depends on:
Blocks:
 
Reported: 2021-09-30 03:13 EDT by Ed Willink CLA
Modified: 2023-09-21 13:16 EDT (History)
0 users

See Also:


Attachments
Thread dump (77.62 KB, text/plain)
2021-09-30 03:13 EDT, Ed Willink CLA
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
Description Ed Willink CLA 2021-09-30 03:13:12 EDT
Created attachment 287235 [details]
Thread dump

Version: 2021-09 (4.21)
Build id: I20210906-0500

After a prolonged development session, I was forced to kill Eclipse because of a UI hang. The thread trace below shows a surprising amount of non-trivial activity on the main thread that seemed to be the only one active.

So, yet again, why is there no ctrl-\ or equivalent to regain control of a malfunctioning UI thread?

Immediately prior to the hang I had re-auto-generated OCLmetamodel.java which is a 4500 line file whose import formatting is inferior benefiting from a click on blank line, add space, Ctrl-S to normalize it.

At the time, a compare editor had been opened from the GIT staging view for OCLmetamodel.java so it was subject to a double edit of content changed on the file system. Two other editors, not obviously interesting, were also open.

Attempting to reproduce in a fresh Eclipse failed. It showed that the normalise and save normally takes barely a second. Similarly with a concurrent Compare Editor, it again takes barely a second.

The stack trace shows that somehow the save action is involved in frighteningly recursive searches, possibly related to my use of @NonNull and @Nullable Annotations; yoyally unsuitable for the main UI thread. Full thread dump attached.


"main" #1 prio=6 os_prio=0 cpu=2631453.13ms elapsed=183896.64s tid=0x0000019384913800 nid=0x27dc runnable  [0x0000007a507f8000]
   java.lang.Thread.State: RUNNABLE
        at org.eclipse.jdt.internal.core.JavaElement.equals(JavaElement.java:185)
        at org.eclipse.jdt.internal.core.SourceRefElement.equals(SourceRefElement.java:89)
        at org.eclipse.jdt.internal.core.SourceType.equals(SourceType.java:202)
        at org.eclipse.jdt.internal.core.JavaElement.equals(JavaElement.java:185)
        at org.eclipse.jdt.internal.core.SourceRefElement.equals(SourceRefElement.java:89)
        at org.eclipse.jdt.internal.core.SourceType.equals(SourceType.java:202)
        at org.eclipse.jdt.internal.core.JavaElement.equals(JavaElement.java:185)
        at org.eclipse.jdt.internal.core.SourceRefElement.equals(SourceRefElement.java:89)
        at org.eclipse.jdt.internal.core.SourceField.equals(SourceField.java:35)
        at org.eclipse.jdt.internal.core.JavaElement.equals(JavaElement.java:185)
        at org.eclipse.jdt.internal.core.SourceRefElement.equals(SourceRefElement.java:89)
        at org.eclipse.jdt.internal.core.Annotation.equals(Annotation.java:59)
        at java.util.HashMap$TreeNode.find(java.base@11.0.12/HashMap.java:1914)
        at java.util.HashMap$TreeNode.find(java.base@11.0.12/HashMap.java:1924)
        at java.util.HashMap$TreeNode.find(java.base@11.0.12/HashMap.java:1924)
        at java.util.HashMap$TreeNode.find(java.base@11.0.12/HashMap.java:1924)
        at java.util.HashMap$TreeNode.find(java.base@11.0.12/HashMap.java:1924)
        at java.util.HashMap$TreeNode.find(java.base@11.0.12/HashMap.java:1924)
        at java.util.HashMap$TreeNode.putTreeVal(java.base@11.0.12/HashMap.java:2043)
        at java.util.HashMap.putVal(java.base@11.0.12/HashMap.java:633)
        at java.util.HashMap.put(java.base@11.0.12/HashMap.java:607)
        at org.eclipse.jdt.internal.core.JavaModelCache.putInfo(JavaModelCache.java:252)
        at org.eclipse.jdt.internal.core.JavaModelManager.putInfos(JavaModelManager.java:4074)
        - locked <0x0000000707f53bc8> (a org.eclipse.jdt.internal.core.JavaModelManager)
        at org.eclipse.jdt.internal.core.JavaElement.openWhenClosed(JavaElement.java:620)
        at org.eclipse.jdt.internal.core.BecomeWorkingCopyOperation.executeOperation(BecomeWorkingCopyOperation.java:43)
        at org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperation.java:740)
        at org.eclipse.jdt.internal.core.JavaModelOperation.runOperation(JavaModelOperation.java:806)
        at org.eclipse.jdt.internal.core.CompilationUnit.getWorkingCopy(CompilationUnit.java:1041)
        at org.eclipse.jdt.internal.core.CompilationUnit.getWorkingCopy(CompilationUnit.java:1007)
        at org.eclipse.jdt.internal.corext.util.JavaModelUtil.getStaticImportFavorites(JavaModelUtil.java:1251)
        at org.eclipse.jdt.core.manipulation.OrganizeImportsOperation.addStaticImports(OrganizeImportsOperation.java:686)
        at org.eclipse.jdt.core.manipulation.OrganizeImportsOperation.createTextEdit(OrganizeImportsOperation.java:599)
        at org.eclipse.jdt.internal.corext.fix.ImportsFix.createCleanUp(ImportsFix.java:51)
        at org.eclipse.jdt.internal.ui.fix.ImportsCleanUp.createFix(ImportsCleanUp.java:62)
        at org.eclipse.jdt.internal.corext.fix.CleanUpRefactoring.calculateChange(CleanUpRefactoring.java:768)
        at org.eclipse.jdt.internal.corext.fix.CleanUpPostSaveListener.saved(CleanUpPostSaveListener.java:384)
        at org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitDocumentProvider$4.run(CompilationUnitDocumentProvider.java:1642)
        at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45)
        at org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitDocumentProvider.notifyPostSaveListeners(CompilationUnitDocumentProvider.java:1636)
        at org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitDocumentProvider.commitWorkingCopy(CompilationUnitDocumentProvider.java:1420)
        at org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitDocumentProvider$3.execute(CompilationUnitDocumentProvider.java:1495)
        at org.eclipse.ui.editors.text.TextFileDocumentProvider$DocumentProviderOperation.run(TextFileDocumentProvider.java:133)
        at org.eclipse.ui.actions.WorkspaceModifyDelegatingOperation.execute(WorkspaceModifyDelegatingOperation.java:71)
        at org.eclipse.ui.actions.WorkspaceModifyOperation.lambda$0(WorkspaceModifyOperation.java:110)
        at org.eclipse.ui.actions.WorkspaceModifyOperation$$Lambda$1623/0x00000008019f1c40.run(Unknown Source)
        at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2313)
        at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2338)
        at org.eclipse.ui.actions.WorkspaceModifyOperation.run(WorkspaceModifyOperation.java:131)
        - locked <0x000000073ea57ba8> (a org.eclipse.ui.actions.WorkspaceModifyDelegatingOperation)
        at org.eclipse.ui.internal.editors.text.WorkspaceOperationRunner.run(WorkspaceOperationRunner.java:76)
        at org.eclipse.ui.internal.editors.text.WorkspaceOperationRunner.run(WorkspaceOperationRunner.java:66)
        at org.eclipse.ui.editors.text.TextFileDocumentProvider.executeOperation(TextFileDocumentProvider.java:461)
        at org.eclipse.ui.editors.text.TextFileDocumentProvider.saveDocument(TextFileDocumentProvider.java:764)
        at org.eclipse.ui.texteditor.AbstractTextEditor.performSave(AbstractTextEditor.java:5008)
        at org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitEditor.performSave(CompilationUnitEditor.java:1262)
        at org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitEditor.doSave(CompilationUnitEditor.java:1316)
        - locked <0x0000000730a436e8> (a org.eclipse.jdt.internal.core.CompilationUnit)
        at org.eclipse.ui.texteditor.AbstractTextEditor$TextEditorSavable.doSave(AbstractTextEditor.java:7152)
        at org.eclipse.ui.Saveable.doSave(Saveable.java:213)
        at org.eclipse.ui.internal.SaveableHelper.doSaveModel(SaveableHelper.java:333)
        at org.eclipse.ui.internal.SaveableHelper.lambda$1(SaveableHelper.java:196)
        at org.eclipse.ui.internal.SaveableHelper$$Lambda$1638/0x00000008019f6440.run(Unknown Source)
        at org.eclipse.ui.internal.SaveableHelper.lambda$3(SaveableHelper.java:271)
        at org.eclipse.ui.internal.SaveableHelper$$Lambda$1639/0x0000000801a00040.run(Unknown Source)
        at org.eclipse.jface.operation.ModalContext.runInCurrentThread(ModalContext.java:434)
        at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:352)
        at org.eclipse.ui.internal.WorkbenchWindow.lambda$7(WorkbenchWindow.java:2345)
        at org.eclipse.ui.internal.WorkbenchWindow$$Lambda$987/0x0000000800ba4040.run(Unknown Source)
        at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:74)
        at org.eclipse.ui.internal.WorkbenchWindow.run(WorkbenchWindow.java:2343)
        at org.eclipse.ui.internal.SaveableHelper.runProgressMonitorOperation(SaveableHelper.java:278)
        at org.eclipse.ui.internal.SaveableHelper.runProgressMonitorOperation(SaveableHelper.java:260)
        at org.eclipse.ui.internal.SaveableHelper.saveModels(SaveableHelper.java:207)
        at org.eclipse.ui.internal.SaveableHelper.savePart(SaveableHelper.java:150)
        at org.eclipse.ui.internal.WorkbenchPage.saveSaveable(WorkbenchPage.java:3820)
        at org.eclipse.ui.internal.WorkbenchPage.saveEditor(WorkbenchPage.java:3833)
        at org.eclipse.ui.internal.handlers.SaveHandler.execute(SaveHandler.java:82)
        at org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:283)
        at org.eclipse.ui.internal.handlers.E4HandlerProxy.execute(E4HandlerProxy.java:97)
        at jdk.internal.reflect.GeneratedMethodAccessor250.invoke(Unknown Source)
        at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(java.base@11.0.12/DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(java.base@11.0.12/Method.java:566)
        at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:58)
        at org.eclipse.e4.core.internal.di.InjectorImpl.invokeUsingClass(InjectorImpl.java:317)
        at org.eclipse.e4.core.internal.di.InjectorImpl.invoke(InjectorImpl.java:251)
        at org.eclipse.e4.core.contexts.ContextInjectionFactory.invoke(ContextInjectionFactory.java:173)
        at org.eclipse.e4.core.commands.internal.HandlerServiceHandler.execute(HandlerServiceHandler.java:156)
        at org.eclipse.core.commands.Command.executeWithChecks(Command.java:488)
        at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:487)
        at org.eclipse.e4.core.commands.internal.HandlerServiceImpl.executeHandler(HandlerServiceImpl.java:213)
        at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher.executeCommand(KeyBindingDispatcher.java:308)
        at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher.press(KeyBindingDispatcher.java:580)
        at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher.processKeyEvent(KeyBindingDispatcher.java:647)
        at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher.filterKeySequenceBindings(KeyBindingDispatcher.java:439)
        at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher$KeyDownFilter.handleEvent(KeyBindingDispatcher.java:96)
        at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89)
        at org.eclipse.swt.widgets.Display.filterEvent(Display.java:1270)
        at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1059)
        at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1084)
        at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1069)
        at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:1111)
        at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:1107)
        at org.eclipse.swt.widgets.Widget.wmChar(Widget.java:1536)
        at org.eclipse.swt.widgets.Control.WM_CHAR(Control.java:4875)
        at org.eclipse.swt.widgets.Canvas.WM_CHAR(Canvas.java:345)
        at org.eclipse.swt.widgets.Control.windowProc(Control.java:4753)
        at org.eclipse.swt.widgets.Canvas.windowProc(Canvas.java:340)
        at org.eclipse.swt.widgets.Display.windowProc(Display.java:4958)
        at org.eclipse.swt.internal.win32.OS.DispatchMessage(Native Method)
        at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3624)
        at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1150)
        at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338)
        at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1041)
        at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155)
        at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:644)
        at org.eclipse.ui.internal.Workbench$$Lambda$217/0x000000080047e040.run(Unknown Source)
        at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338)
        at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:551)
        at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:156)
        at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:152)
        at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203)
        at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:136)
        at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
        at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:401)
        at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255)
        at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(java.base@11.0.12/Native Method)
        at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(java.base@11.0.12/NativeMethodAccessorImpl.java:62)
        at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(java.base@11.0.12/DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(java.base@11.0.12/Method.java:566)
        at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:659)
        at org.eclipse.equinox.launcher.Main.basicRun(Main.java:596)
        at org.eclipse.equinox.launcher.Main.run(Main.java:1467)
        at org.eclipse.equinox.launcher.Main.main(Main.java:1440)
Comment 1 Eclipse Genie CLA 2023-09-21 13:16:41 EDT
This bug hasn't had any activity in quite some time. Maybe the problem got resolved, was a duplicate of something else, or became less pressing for some reason - or maybe it's still relevant but just hasn't been looked at yet.

If you have further information on the current state of the bug, please add it. The information can be, for example, that the problem still occurs, that you still want the feature, that more information is needed, or that the bug is (for whatever reason) no longer relevant.

--
The automated Eclipse Genie.