Community
Participate
Working Groups
Got a (prevented) deadlock error on startup using latest platform / egit versions as of today. Looks like while egit decorator init in background thread it tries to call into UI via syncExec() but UI seem to be locked by other task. So deadlock prevention code interrupted UI operation (bad). I have a fix. !ENTRY org.eclipse.ui 4 4 2022-05-19 09:29:36.998 !MESSAGE To avoid deadlock while executing Display.syncExec() with argument: org.eclipse.egit.ui.internal.decorators.GitLightweightDecorator$ChangeTrackingColorsAndFonts$$Lambda$987/0x0000000840bcb040@47d42394, thread Worker-8: Decoration Calculation will interrupt UI thread. !SUBENTRY 1 org.eclipse.ui 4 4 2022-05-19 09:29:36.998 !MESSAGE Worker-8: Decoration Calculation thread is an instance of Worker or owns an ILock !STACK 0 java.lang.IllegalStateException: Call stack for thread Worker-8: Decoration Calculation at java.management@11.0.10/sun.management.ThreadImpl.dumpThreads0(Native Method) at java.management@11.0.10/sun.management.ThreadImpl.getThreadInfo(ThreadImpl.java:485) at org.eclipse.ui.internal.UILockListener.reportInterruption(UILockListener.java:214) at org.eclipse.ui.internal.UILockListener.interruptUI(UILockListener.java:180) at org.eclipse.ui.internal.PendingSyncExec.waitUntilExecuted(PendingSyncExec.java:92) at org.eclipse.ui.internal.UISynchronizer.syncExec(UISynchronizer.java:142) at org.eclipse.swt.widgets.Display.syncExec(Display.java:5911) at org.eclipse.egit.ui.internal.decorators.GitLightweightDecorator$ChangeTrackingColorsAndFonts.reload(GitLightweightDecorator.java:338) at org.eclipse.egit.ui.internal.decorators.GitLightweightDecorator$ChangeTrackingColorsAndFonts.<init>(GitLightweightDecorator.java:333) at org.eclipse.egit.ui.internal.decorators.GitLightweightDecorator.<init>(GitLightweightDecorator.java:127) at java.base@11.0.10/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at java.base@11.0.10/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at java.base@11.0.10/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.base@11.0.10/java.lang.reflect.Constructor.newInstance(Constructor.java:490) at org.eclipse.core.internal.registry.osgi.RegistryStrategyOSGI.createExecutableExtension(RegistryStrategyOSGI.java:204) at org.eclipse.core.internal.registry.ExtensionRegistry.createExecutableExtension(ExtensionRegistry.java:920) at org.eclipse.core.internal.registry.ConfigurationElement.createExecutableExtension(ConfigurationElement.java:246) at org.eclipse.core.internal.registry.ConfigurationElementHandle.createExecutableExtension(ConfigurationElementHandle.java:63) at org.eclipse.ui.internal.WorkbenchPlugin.createExtension(WorkbenchPlugin.java:281) at org.eclipse.ui.internal.decorators.LightweightDecoratorDefinition$1.run(LightweightDecoratorDefinition.java:123) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) at org.eclipse.ui.internal.decorators.LightweightDecoratorDefinition.internalGetDecorator(LightweightDecoratorDefinition.java:119) at org.eclipse.ui.internal.decorators.LightweightDecoratorDefinition.decorate(LightweightDecoratorDefinition.java:240) at org.eclipse.ui.internal.decorators.LightweightDecoratorManager$LightweightRunnable.run(LightweightDecoratorManager.java:105) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) at org.eclipse.ui.internal.decorators.LightweightDecoratorManager.decorate(LightweightDecoratorManager.java:360) at org.eclipse.ui.internal.decorators.LightweightDecoratorManager.getDecorations(LightweightDecoratorManager.java:346) at org.eclipse.ui.internal.decorators.DecorationScheduler$1.queue(DecorationScheduler.java:419) at org.eclipse.ui.internal.decorators.DecorationScheduler$1.run(DecorationScheduler.java:397) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) !SUBENTRY 1 org.eclipse.ui 4 4 2022-05-19 09:29:36.998 !MESSAGE UI thread waiting on a job or lock. !STACK 0 java.lang.IllegalStateException: Call stack for thread main at java.base@11.0.10/java.lang.Object.wait(Native Method) at org.eclipse.core.internal.jobs.Semaphore.acquire(Semaphore.java:45) at org.eclipse.core.internal.jobs.OrderedLock.doAcquire(OrderedLock.java:172) at org.eclipse.core.internal.jobs.OrderedLock.acquire(OrderedLock.java:108) at org.eclipse.core.internal.jobs.OrderedLock.acquire(OrderedLock.java:85) at org.eclipse.core.internal.resources.WorkManager.checkIn(WorkManager.java:125) at org.eclipse.core.internal.resources.Workspace.prepareOperation(Workspace.java:2330) at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2375) at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2405) at org.eclipse.jdt.internal.core.JavaModelManager.initializeAllContainers(JavaModelManager.java:3091) at org.eclipse.jdt.internal.core.JavaModelManager.getClasspathContainer(JavaModelManager.java:2088) at org.eclipse.jdt.core.JavaCore.getClasspathContainer(JavaCore.java:3789) at org.eclipse.jdt.internal.core.JavaProject.resolveClasspath(JavaProject.java:3270) at org.eclipse.jdt.internal.core.JavaProject.resolveClasspath(JavaProject.java:3434) at org.eclipse.jdt.internal.core.JavaProject.getResolvedClasspath(JavaProject.java:2519) at org.eclipse.jdt.internal.core.JavaProject.buildStructure(JavaProject.java:535) at org.eclipse.jdt.internal.core.Openable.generateInfos(Openable.java:266) at org.eclipse.jdt.internal.core.JavaElement.openWhenClosed(JavaElement.java:597) at org.eclipse.jdt.internal.core.JavaElement.getElementInfo(JavaElement.java:328) at org.eclipse.jdt.internal.core.JavaElement.getElementInfo(JavaElement.java:314) at org.eclipse.jdt.internal.core.JavaElement.getChildren(JavaElement.java:269) at org.eclipse.jdt.internal.core.JavaProject.getPackageFragmentRoots(JavaProject.java:2383) at org.eclipse.jdt.internal.ui.workingsets.DynamicSourcesWorkingSetUpdater.collectData(DynamicSourcesWorkingSetUpdater.java:266) at org.eclipse.jdt.internal.ui.workingsets.DynamicSourcesWorkingSetUpdater.restore(DynamicSourcesWorkingSetUpdater.java:305) at org.eclipse.ui.internal.WorkingSet.restoreWorkingSet(WorkingSet.java:154) at org.eclipse.ui.internal.AbstractWorkingSet.getElementsArray(AbstractWorkingSet.java:166) at org.eclipse.ui.internal.WorkingSet.equals(WorkingSet.java:98) at java.base@11.0.10/java.util.HashMap.getNode(HashMap.java:567) at java.base@11.0.10/java.util.HashMap.containsKey(HashMap.java:591) at java.base@11.0.10/java.util.HashSet.contains(HashSet.java:204) at org.eclipse.jdt.internal.ui.workingsets.DynamicSourcesWorkingSetUpdater.contains(DynamicSourcesWorkingSetUpdater.java:172) at org.eclipse.ui.internal.AbstractWorkingSetManager$8$1.run(AbstractWorkingSetManager.java:654) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) at org.eclipse.ui.internal.AbstractWorkingSetManager$8.runInUIThread(AbstractWorkingSetManager.java:650) at org.eclipse.ui.progress.UIJob.lambda$0(UIJob.java:95) at org.eclipse.ui.progress.UIJob$$Lambda$903/0x0000000840b29c40.run(Unknown Source) at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40) at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:132) at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:5000) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:4480) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1155) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1046) 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$154/0x0000000840330040.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:402) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) at java.base@11.0.10/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base@11.0.10/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base@11.0.10/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base@11.0.10/java.lang.reflect.Method.invoke(Method.java:566) at app//org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:659) at app//org.eclipse.equinox.launcher.Main.basicRun(Main.java:596) at app//org.eclipse.equinox.launcher.Main.run(Main.java:1467) at app//org.eclipse.equinox.launcher.Main.main(Main.java:1440)
New Gerrit change created: https://git.eclipse.org/r/c/egit/egit/+/193504
Gerrit change https://git.eclipse.org/r/c/egit/egit/+/193504 was merged to [master]. Commit: http://git.eclipse.org/c/egit/egit.git/commit/?id=81c4eb18e1cdd7fc64190580a1f6d077e4098d5e