Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

JDT calls PDE Classpath on startup with open Editor hindering the UI to show up #1481

Closed
jukzi opened this issue Nov 18, 2024 · 21 comments
Closed

Comments

@jukzi
Copy link
Contributor

jukzi commented Nov 18, 2024

Sometimes Eclipse does not start, but hangs at splash screen:
image

I am not sure it a real deadlock, but after an hour i stopped waiting.
I am not sure its a PDE problem either, but it feels like it has todo with lock 0x0000000705322ce8 (PluginModelManager.isInitialized) in this example thread dump, but also that org.eclipse.equinox.internal.p2.transport.ecf.FileInfoReader.waitOnSelf in the dump looks odd (what is it waiting for?):

2024-11-18 14:16:07
Full thread dump OpenJDK 64-Bit Server VM (21.0.2+13-LTS mixed mode, sharing):

Threads class SMR info:
_java_thread_list=0x0000024465f866c0, length=34, elements={
0x000002447f2af5f0, 0x000002441ecbc660, 0x000002441ecbd0c0, 0x000002441ecc0a70,
0x000002441ecc1750, 0x000002441eccd110, 0x000002441ecd1070, 0x000002441ecd25a0,
0x000002441ecd7a00, 0x000002441edf5360, 0x000002441ef1ed80, 0x0000024465fc1fc0,
0x00000244660a2920, 0x000002446605dc40, 0x0000024466cc3290, 0x00000244671a40e0,
0x0000024468ce0900, 0x0000024466cfb2f0, 0x00000244678d2b70, 0x00000244678d24e0,
0x00000244678d3200, 0x00000244678d45b0, 0x00000244699edb20, 0x000002446a2250a0,
0x000002446706dd30, 0x00000244660e11c0, 0x00000244660e0b30, 0x000002446706e3c0,
0x000002446a2222b0, 0x00000244679772c0, 0x00000244699f3070, 0x00000244699ec770,
0x000002446a3fe2e0, 0x000002446a476420
}

"main" #1 [29296] prio=6 os_prio=0 cpu=3124906.25ms elapsed=3449.54s tid=0x000002447f2af5f0 nid=29296 runnable  [0x000000d673da8000]
   java.lang.Thread.State: RUNNABLE
        at org.eclipse.core.internal.jobs.InternalJob.join(InternalJob.java:355)
        at org.eclipse.core.runtime.jobs.Job.join(Job.java:531)
        at org.eclipse.equinox.internal.p2.transport.ecf.FileInfoReader.waitOnSelf(FileInfoReader.java:73)
        at org.eclipse.equinox.internal.p2.transport.ecf.FileInfoReader.getRemoteFiles(FileInfoReader.java:109)
        at org.eclipse.equinox.internal.p2.transport.ecf.FileInfoReader.getRemoteFile(FileInfoReader.java:124)
        at org.eclipse.equinox.internal.p2.transport.ecf.FileInfoReader.getLastModified(FileInfoReader.java:129)
        at org.eclipse.equinox.internal.p2.transport.ecf.RepositoryTransport.getLastModified(RepositoryTransport.java:275)
        at org.eclipse.equinox.internal.p2.repository.CacheManager.getLastModified(CacheManager.java:278)
        at org.eclipse.equinox.internal.p2.repository.CacheManager.createCache(CacheManager.java:195)
        at org.eclipse.equinox.internal.p2.metadata.repository.SimpleMetadataRepositoryFactory.getLocalFile(SimpleMetadataRepositoryFactory.java:69)
        at org.eclipse.equinox.internal.p2.metadata.repository.SimpleMetadataRepositoryFactory.load(SimpleMetadataRepositoryFactory.java:89)
        at org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryManager.factoryLoad(MetadataRepositoryManager.java:63)
        at org.eclipse.equinox.internal.p2.repository.helpers.AbstractRepositoryManager.loadRepository(AbstractRepositoryManager.java:799)
        at org.eclipse.equinox.internal.p2.repository.helpers.AbstractRepositoryManager.loadRepository(AbstractRepositoryManager.java:697)
        at org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryManager.loadRepository(MetadataRepositoryManager.java:110)
        at org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryManager.loadRepository(MetadataRepositoryManager.java:105)
        at org.eclipse.pde.internal.core.target.P2TargetUtils.getQueryableMetadata(P2TargetUtils.java:1007)
        at org.eclipse.pde.internal.core.target.IUBundleContainer.getRootIUs(IUBundleContainer.java:769)
        at org.eclipse.pde.internal.core.target.P2TargetUtils.getRootIUs(P2TargetUtils.java:1540)
        at org.eclipse.pde.internal.core.target.P2TargetUtils.resolveWithSlicer(P2TargetUtils.java:1292)
        at org.eclipse.pde.internal.core.target.P2TargetUtils.synchronize(P2TargetUtils.java:839)
        - locked <0x0000000704434858> (a org.eclipse.pde.internal.core.target.P2TargetUtils)
        at org.eclipse.pde.internal.core.target.TargetDefinition.lambda$3(TargetDefinition.java:402)
        at org.eclipse.pde.internal.core.target.TargetDefinition$$Lambda/0x0000024420a18fb8.accept(Unknown Source)
        at java.util.HashMap.forEach([email protected]/HashMap.java:1429)
        at org.eclipse.pde.internal.core.target.TargetDefinition.resolve(TargetDefinition.java:399)
        at org.eclipse.oomph.targlets.internal.core.TargletContainer$ComposedTargetContent.resolve(TargletContainer.java:1394)
        at org.eclipse.oomph.targlets.internal.core.TargletContainer.generateUnits(TargletContainer.java:688)
        at org.eclipse.oomph.targlets.internal.core.TargletContainer.resolveUnits(TargletContainer.java:651)
        at org.eclipse.oomph.targlets.internal.core.TargletContainer.resolveBundles(TargletContainer.java:597)
        at org.eclipse.pde.internal.core.target.AbstractBundleContainer.resolve(AbstractBundleContainer.java:97)
        at org.eclipse.pde.internal.core.target.TargetDefinition.resolve(TargetDefinition.java:386)
        at org.eclipse.pde.internal.core.TargetPlatformHelper.getWorkspaceTargetResolved(TargetPlatformHelper.java:565)
        at org.eclipse.pde.internal.core.PluginModelManager.getExternalBundles(PluginModelManager.java:644)
        at org.eclipse.pde.internal.core.PluginModelManager.initializeTable(PluginModelManager.java:567)
        at org.eclipse.pde.internal.core.PluginModelManager.findModel(PluginModelManager.java:1032)
        - locked <0x0000000705322ce8> (a java.lang.Object)
        at org.eclipse.pde.internal.core.RequiredPluginsInitializer.initialize(RequiredPluginsInitializer.java:50)
        at org.eclipse.jdt.internal.core.JavaModelManager.initializeContainer(JavaModelManager.java:3209)
        at org.eclipse.jdt.internal.core.JavaModelManager.getClasspathContainer(JavaModelManager.java:2136)
        at org.eclipse.jdt.core.JavaCore.getClasspathContainer(JavaCore.java:3970)
        at org.eclipse.jdt.internal.core.JavaProject.resolveClasspath(JavaProject.java:3127)
        at org.eclipse.jdt.internal.core.JavaProject.resolveClasspath(JavaProject.java:3291)
        at org.eclipse.jdt.internal.core.JavaProject.getResolvedClasspath(JavaProject.java:2405)
        at org.eclipse.jdt.internal.core.JavaProject.buildStructure(JavaProject.java:488)
        at org.eclipse.jdt.internal.core.Openable.generateInfos(Openable.java:246)
        at org.eclipse.jdt.internal.core.Openable.openAncestors(Openable.java:508)
        at org.eclipse.jdt.internal.core.Openable.generateInfos(Openable.java:228)
        at org.eclipse.jdt.internal.core.JavaElement.openWhenClosed(JavaElement.java:569)
        at org.eclipse.jdt.internal.core.JavaElement.getElementInfo(JavaElement.java:292)
        at org.eclipse.jdt.internal.core.JavaElement.getElementInfo(JavaElement.java:278)
        at org.eclipse.jdt.internal.core.PackageFragmentRoot.getKind(PackageFragmentRoot.java:539)
        at org.eclipse.jdt.internal.core.PackageFragment.getKind(PackageFragment.java:367)
        at org.eclipse.jdt.internal.core.PackageFragment.validateExistence(PackageFragment.java:596)
        at org.eclipse.jdt.internal.core.Openable.exists(Openable.java:212)
        at org.eclipse.jdt.internal.core.PackageFragment.exists(PackageFragment.java:189)
        at org.eclipse.jdt.ui.StandardJavaElementContentProvider.exists(StandardJavaElementContentProvider.java:509)
        at org.eclipse.jdt.ui.StandardJavaElementContentProvider.getParent(StandardJavaElementContentProvider.java:246)
        at org.eclipse.jdt.internal.ui.javaeditor.JavaEditorBreadcrumb$JavaEditorBreadcrumbContentProvider.getParent(JavaEditorBreadcrumb.java:354)
        at org.eclipse.jdt.internal.ui.javaeditor.breadcrumb.BreadcrumbViewer.buildItemChain(BreadcrumbViewer.java:571)
        at org.eclipse.jdt.internal.ui.javaeditor.breadcrumb.BreadcrumbViewer.buildItemChain(BreadcrumbViewer.java:573)
        at org.eclipse.jdt.internal.ui.javaeditor.breadcrumb.BreadcrumbViewer.inputChanged(BreadcrumbViewer.java:275)
        at org.eclipse.jface.viewers.ContentViewer.setInput(ContentViewer.java:282)
        at org.eclipse.jface.viewers.StructuredViewer.setInput(StructuredViewer.java:1636)
        at org.eclipse.jdt.internal.ui.javaeditor.breadcrumb.EditorBreadcrumb.setInput(EditorBreadcrumb.java:168)
        at org.eclipse.jdt.internal.ui.javaeditor.JavaEditorBreadcrumb.setInput(JavaEditorBreadcrumb.java:797)
        at org.eclipse.jdt.internal.ui.javaeditor.JavaEditor.setBreadcrumbInput(JavaEditor.java:2007)
        at org.eclipse.jdt.internal.ui.javaeditor.JavaEditor.showBreadcrumb(JavaEditor.java:1981)
        at org.eclipse.jdt.internal.ui.javaeditor.JavaEditor.createPartControl(JavaEditor.java:3119)
        at org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitEditor.createPartControl(CompilationUnitEditor.java:1526)
        at org.eclipse.ui.internal.e4.compatibility.CompatibilityPart.createPartControl(CompatibilityPart.java:158)
        at org.eclipse.ui.internal.e4.compatibility.CompatibilityEditor.createPartControl(CompatibilityEditor.java:96)
        at org.eclipse.ui.internal.e4.compatibility.CompatibilityPart.create(CompatibilityPart.java:365)
        at java.lang.invoke.LambdaForm$DMH/0x0000024420001400.invokeVirtual([email protected]/LambdaForm$DMH)
        at java.lang.invoke.LambdaForm$MH/0x00000244200b8400.invoke([email protected]/LambdaForm$MH)
        at java.lang.invoke.Invokers$Holder.invokeExact_MT([email protected]/Invokers$Holder)
        at jdk.internal.reflect.DirectMethodHandleAccessor.invokeImpl([email protected]/DirectMethodHandleAccessor.java:153)
        at jdk.internal.reflect.DirectMethodHandleAccessor.invoke([email protected]/DirectMethodHandleAccessor.java:103)
        at java.lang.reflect.Method.invoke([email protected]/Method.java:580)
        at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:56)
        at org.eclipse.e4.core.internal.di.InjectorImpl.processAnnotated(InjectorImpl.java:977)
        at org.eclipse.e4.core.internal.di.InjectorImpl.processAnnotated(InjectorImpl.java:939)
        at org.eclipse.e4.core.internal.di.InjectorImpl.internalInject(InjectorImpl.java:139)
        at org.eclipse.e4.core.internal.di.InjectorImpl.internalMake(InjectorImpl.java:386)
        at org.eclipse.e4.core.internal.di.InjectorImpl.make(InjectorImpl.java:312)
        at org.eclipse.e4.core.contexts.ContextInjectionFactory.make(ContextInjectionFactory.java:203)
        at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.createFromBundle(ReflectionContributionFactory.java:90)
        at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.doCreate(ReflectionContributionFactory.java:59)
        at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.create(ReflectionContributionFactory.java:42)
        at org.eclipse.e4.ui.workbench.renderers.swt.ContributedPartRenderer.createWidget(ContributedPartRenderer.java:134)
        at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createWidget(PartRenderingEngine.java:991)
        at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:658)
        at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:762)
        at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:727)
        at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:47)
        at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:711)
        at org.eclipse.e4.ui.workbench.renderers.swt.StackRenderer.showTab(StackRenderer.java:1389)
        at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.postProcess(LazyStackRenderer.java:114)
        at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676)
        at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:762)
        at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:727)
        at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:47)
        at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:711)
        at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:72)
        at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:672)
        at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$1.run(PartRenderingEngine.java:543)
        at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:47)
        at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:527)
        at org.eclipse.e4.ui.workbench.renderers.swt.ElementReferenceRenderer.createWidget(ElementReferenceRenderer.java:73)
        at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createWidget(PartRenderingEngine.java:991)
        at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:658)
        at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:762)
        at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:727)
        at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:47)
        at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:711)
        at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:72)
        at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:147)
        at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:672)
        at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:762)
        at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:727)
        at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:47)
        at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:711)
        at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:72)
        at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:147)
        at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:672)
        at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:762)
        at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:727)
        at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:47)
        at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:711)
        at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:72)
        at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveRenderer.processContents(PerspectiveRenderer.java:48)
        at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:672)
        at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:762)
        at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:727)
        at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:47)
        at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:711)
        at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveStackRenderer.showTab(PerspectiveStackRenderer.java:79)
        at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.postProcess(LazyStackRenderer.java:114)
        at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveStackRenderer.postProcess(PerspectiveStackRenderer.java:61)
        at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676)
        at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:762)
        at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:727)
        at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:47)
        at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:711)
        at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:72)
        at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:147)
        at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:672)
        at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:762)
        at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:727)
        at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:47)
        at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:711)
        at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:72)
        at org.eclipse.e4.ui.workbench.renderers.swt.WBWRenderer.processContents(WBWRenderer.java:662)
        at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:672)
        at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:762)
        at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:727)
        at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:47)
        at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:711)
        at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1079)
        at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:339)
        at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1042)
        at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:153)
        at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:663)
        at org.eclipse.ui.internal.Workbench$$Lambda/0x000002442023dc50.run(Unknown Source)
        at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:339)
        at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:570)
        at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:173)
        at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:178)
        at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:208)
        at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:143)
        at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:109)
        at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:439)
        at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:271)
        at java.lang.invoke.DirectMethodHandle$Holder.invokeStatic([email protected]/DirectMethodHandle$Holder)
        at java.lang.invoke.LambdaForm$MH/0x0000024420007800.invoke([email protected]/LambdaForm$MH)
        at java.lang.invoke.LambdaForm$MH/0x0000024420007c00.invokeExact_MT([email protected]/LambdaForm$MH)
        at jdk.internal.reflect.DirectMethodHandleAccessor.invokeImpl([email protected]/DirectMethodHandleAccessor.java:155)
        at jdk.internal.reflect.DirectMethodHandleAccessor.invoke([email protected]/DirectMethodHandleAccessor.java:103)
        at java.lang.reflect.Method.invoke([email protected]/Method.java:580)
        at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:668)
        at org.eclipse.equinox.launcher.Main.basicRun(Main.java:605)
        at org.eclipse.equinox.launcher.Main.run(Main.java:1481)

   Locked ownable synchronizers:
        - None

"Reference Handler" #9 [21712] daemon prio=10 os_prio=2 cpu=0.00ms elapsed=3449.51s tid=0x000002441ecbc660 nid=21712 waiting on condition  [0x000000d6748ff000]
   java.lang.Thread.State: RUNNABLE
        at java.lang.ref.Reference.waitForReferencePendingList([email protected]/Native Method)
        at java.lang.ref.Reference.processPendingReferences([email protected]/Reference.java:246)
        at java.lang.ref.Reference$ReferenceHandler.run([email protected]/Reference.java:208)

   Locked ownable synchronizers:
        - None

"Finalizer" #10 [29976] daemon prio=8 os_prio=1 cpu=0.00ms elapsed=3449.51s tid=0x000002441ecbd0c0 nid=29976 in Object.wait()  [0x000000d6749fe000]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait0([email protected]/Native Method)
        - waiting on <no object reference available>
        at java.lang.Object.wait([email protected]/Object.java:366)
        at java.lang.Object.wait([email protected]/Object.java:339)
        at java.lang.ref.NativeReferenceQueue.await([email protected]/NativeReferenceQueue.java:48)
        at java.lang.ref.ReferenceQueue.remove0([email protected]/ReferenceQueue.java:158)
        at java.lang.ref.NativeReferenceQueue.remove([email protected]/NativeReferenceQueue.java:89)
        - locked <0x00000007000828e8> (a java.lang.ref.NativeReferenceQueue$Lock)
        at java.lang.ref.Finalizer$FinalizerThread.run([email protected]/Finalizer.java:173)

   Locked ownable synchronizers:
        - None

"Signal Dispatcher" #11 [31000] daemon prio=9 os_prio=2 cpu=0.00ms elapsed=3449.51s tid=0x000002441ecc0a70 nid=31000 waiting on condition  [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
        - None

"Attach Listener" #12 [10688] daemon prio=5 os_prio=2 cpu=421.88ms elapsed=3449.51s tid=0x000002441ecc1750 nid=10688 waiting on condition  [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
        - None

"Service Thread" #13 [25308] daemon prio=9 os_prio=0 cpu=0.00ms elapsed=3449.51s tid=0x000002441eccd110 nid=25308 runnable  [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
        - None

"Monitor Deflation Thread" #14 [19144] daemon prio=9 os_prio=0 cpu=15.62ms elapsed=3449.51s tid=0x000002441ecd1070 nid=19144 runnable  [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
        - None

"C2 CompilerThread0" #15 [14692] daemon prio=9 os_prio=2 cpu=11890.62ms elapsed=3449.51s tid=0x000002441ecd25a0 nid=14692 waiting on condition  [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE
   No compile task

   Locked ownable synchronizers:
        - None

"C1 CompilerThread0" #18 [1708] daemon prio=9 os_prio=2 cpu=3921.88ms elapsed=3449.51s tid=0x000002441ecd7a00 nid=1708 waiting on condition  [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE
   No compile task

   Locked ownable synchronizers:
        - None

"Common-Cleaner" #19 [17424] daemon prio=8 os_prio=1 cpu=0.00ms elapsed=3449.49s tid=0x000002441edf5360 nid=17424 waiting on condition  [0x000000d6750ff000]
   java.lang.Thread.State: TIMED_WAITING (parking)
        at jdk.internal.misc.Unsafe.park([email protected]/Native Method)
        - parking to wait for  <0x0000000700084a00> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
        at java.util.concurrent.locks.LockSupport.parkNanos([email protected]/LockSupport.java:269)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await([email protected]/AbstractQueuedSynchronizer.java:1847)
        at java.lang.ref.ReferenceQueue.await([email protected]/ReferenceQueue.java:71)
        at java.lang.ref.ReferenceQueue.remove0([email protected]/ReferenceQueue.java:143)
        at java.lang.ref.ReferenceQueue.remove([email protected]/ReferenceQueue.java:218)
        at jdk.internal.ref.CleanerImpl.run([email protected]/CleanerImpl.java:140)
        at java.lang.Thread.runWith([email protected]/Thread.java:1596)
        at java.lang.Thread.run([email protected]/Thread.java:1583)
        at jdk.internal.misc.InnocuousThread.run([email protected]/InnocuousThread.java:186)

   Locked ownable synchronizers:
        - None

"Notification Thread" #20 [30076] daemon prio=9 os_prio=0 cpu=0.00ms elapsed=3449.48s tid=0x000002441ef1ed80 nid=30076 runnable  [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
        - None

"Active Thread: Equinox Container: 589bc358-ee27-483d-b1ec-174c15e68c32" #22 [31128] prio=5 os_prio=0 cpu=156.25ms elapsed=3448.97s tid=0x0000024465fc1fc0 nid=31128 waiting on condition  [0x000000d6754fe000]
   java.lang.Thread.State: TIMED_WAITING (parking)
        at jdk.internal.misc.Unsafe.park([email protected]/Native Method)
        - parking to wait for  <0x00000007000851b8> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
        at java.util.concurrent.locks.LockSupport.parkNanos([email protected]/LockSupport.java:269)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos([email protected]/AbstractQueuedSynchronizer.java:1758)
        at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take([email protected]/ScheduledThreadPoolExecutor.java:1182)
        at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take([email protected]/ScheduledThreadPoolExecutor.java:899)
        at java.util.concurrent.ThreadPoolExecutor.getTask([email protected]/ThreadPoolExecutor.java:1070)
        at java.util.concurrent.ThreadPoolExecutor.runWorker([email protected]/ThreadPoolExecutor.java:1130)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run([email protected]/ThreadPoolExecutor.java:642)
        at java.lang.Thread.runWith([email protected]/Thread.java:1596)
        at java.lang.Thread.run([email protected]/Thread.java:1583)

   Locked ownable synchronizers:
        - None

"Framework Event Dispatcher: Equinox Container: 589bc358-ee27-483d-b1ec-174c15e68c32" #33 [18308] daemon prio=5 os_prio=0 cpu=62.50ms elapsed=3448.84s tid=0x00000244660a2920 nid=18308 in Object.wait()  [0x000000d675eff000]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait0([email protected]/Native Method)
        - waiting on <no object reference available>
        at java.lang.Object.wait([email protected]/Object.java:366)
        at java.lang.Object.wait([email protected]/Object.java:339)
        at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.getNextEvent(EventManager.java:396)
        - locked <0x0000000704bf6280> (a org.eclipse.osgi.framework.eventmgr.EventManager$EventThread)
        at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:337)

   Locked ownable synchronizers:
        - None

"Start Level: Equinox Container: 589bc358-ee27-483d-b1ec-174c15e68c32" #34 [17020] daemon prio=5 os_prio=0 cpu=1484.38ms elapsed=3448.83s tid=0x000002446605dc40 nid=17020 in Object.wait()  [0x000000d675fff000]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait0([email protected]/Native Method)
        - waiting on <no object reference available>
        at java.lang.Object.wait([email protected]/Object.java:366)
        at java.lang.Object.wait([email protected]/Object.java:339)
        at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.getNextEvent(EventManager.java:396)
        - locked <0x0000000704bf5a70> (a org.eclipse.osgi.framework.eventmgr.EventManager$EventThread)
        at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:337)

   Locked ownable synchronizers:
        - None

"Bundle File Closer" #36 [23480] daemon prio=5 os_prio=0 cpu=46.88ms elapsed=3448.67s tid=0x0000024466cc3290 nid=23480 in Object.wait()  [0x000000d6760ff000]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait0([email protected]/Native Method)
        - waiting on <no object reference available>
        at java.lang.Object.wait([email protected]/Object.java:366)
        at java.lang.Object.wait([email protected]/Object.java:339)
        at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.getNextEvent(EventManager.java:396)
        - locked <0x0000000704bf6a90> (a org.eclipse.osgi.framework.eventmgr.EventManager$EventThread)
        at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:337)

   Locked ownable synchronizers:
        - None

"SCR Component Actor" #37 [17336] daemon prio=5 os_prio=0 cpu=0.00ms elapsed=3448.13s tid=0x00000244671a40e0 nid=17336 in Object.wait()  [0x000000d6761ff000]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait0([email protected]/Native Method)
        - waiting on <no object reference available>
        at java.lang.Object.wait([email protected]/Object.java:366)
        at java.lang.Object.wait([email protected]/Object.java:339)
        at org.apache.felix.scr.impl.ComponentActorThread.run(ComponentActorThread.java:83)
        - locked <0x0000000704bf7b28> (a java.util.LinkedList)
        at java.lang.Thread.runWith([email protected]/Thread.java:1596)
        at java.lang.Thread.run([email protected]/Thread.java:1583)

   Locked ownable synchronizers:
        - None

"Worker-JM" #39 [20572] prio=5 os_prio=0 cpu=0.00ms elapsed=3447.74s tid=0x0000024468ce0900 nid=20572 in Object.wait()  [0x000000d6763ff000]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait0([email protected]/Native Method)
        - waiting on <no object reference available>
        at java.lang.Object.wait([email protected]/Object.java:366)
        at org.eclipse.core.internal.jobs.InternalWorker.run(InternalWorker.java:61)
        - locked <0x0000000704bf7320> (a java.util.ArrayList)

   Locked ownable synchronizers:
        - None

"EMF Reference Cleaner" #40 [27676] daemon prio=5 os_prio=0 cpu=0.00ms elapsed=3447.61s tid=0x0000024466cfb2f0 nid=27676 waiting on condition  [0x000000d6764fe000]
   java.lang.Thread.State: WAITING (parking)
        at jdk.internal.misc.Unsafe.park([email protected]/Native Method)
        - parking to wait for  <0x0000000704bf8338> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
        at java.util.concurrent.locks.LockSupport.park([email protected]/LockSupport.java:371)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block([email protected]/AbstractQueuedSynchronizer.java:519)
        at java.util.concurrent.ForkJoinPool.unmanagedBlock([email protected]/ForkJoinPool.java:3780)
        at java.util.concurrent.ForkJoinPool.managedBlock([email protected]/ForkJoinPool.java:3725)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await([email protected]/AbstractQueuedSynchronizer.java:1707)
        at java.lang.ref.ReferenceQueue.await([email protected]/ReferenceQueue.java:67)
        at java.lang.ref.ReferenceQueue.remove0([email protected]/ReferenceQueue.java:158)
        at java.lang.ref.ReferenceQueue.remove([email protected]/ReferenceQueue.java:234)
        at org.eclipse.emf.common.util.CommonUtil$1ReferenceClearingQueuePollingThread.run(CommonUtil.java:82)

   Locked ownable synchronizers:
        - None

"Gogo shell" #41 [13212] prio=5 os_prio=0 cpu=15.62ms elapsed=3447.32s tid=0x00000244678d2b70 nid=13212 waiting on condition  [0x000000d6765fe000]
   java.lang.Thread.State: WAITING (parking)
        at jdk.internal.misc.Unsafe.park([email protected]/Native Method)
        - parking to wait for  <0x0000000704bf6378> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
        at java.util.concurrent.locks.LockSupport.park([email protected]/LockSupport.java:371)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block([email protected]/AbstractQueuedSynchronizer.java:519)
        at java.util.concurrent.ForkJoinPool.unmanagedBlock([email protected]/ForkJoinPool.java:3780)
        at java.util.concurrent.ForkJoinPool.managedBlock([email protected]/ForkJoinPool.java:3725)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await([email protected]/AbstractQueuedSynchronizer.java:1707)
        at java.util.concurrent.LinkedBlockingQueue.take([email protected]/LinkedBlockingQueue.java:435)
        at java.util.concurrent.ThreadPoolExecutor.getTask([email protected]/ThreadPoolExecutor.java:1070)
        at java.util.concurrent.ThreadPoolExecutor.runWorker([email protected]/ThreadPoolExecutor.java:1130)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run([email protected]/ThreadPoolExecutor.java:642)
        at java.lang.Thread.runWith([email protected]/Thread.java:1596)
        at java.lang.Thread.run([email protected]/Thread.java:1583)

   Locked ownable synchronizers:
        - None

"JNA Cleaner" #47 [15808] daemon prio=6 os_prio=0 cpu=0.00ms elapsed=3177.78s tid=0x00000244678d24e0 nid=15808 waiting on condition  [0x000000d6751fe000]
   java.lang.Thread.State: TIMED_WAITING (parking)
        at jdk.internal.misc.Unsafe.park([email protected]/Native Method)
        - parking to wait for  <0x00000007051e15f0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
        at java.util.concurrent.locks.LockSupport.parkNanos([email protected]/LockSupport.java:269)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await([email protected]/AbstractQueuedSynchronizer.java:1847)
        at java.lang.ref.ReferenceQueue.await([email protected]/ReferenceQueue.java:71)
        at java.lang.ref.ReferenceQueue.remove0([email protected]/ReferenceQueue.java:143)
        at java.lang.ref.ReferenceQueue.remove([email protected]/ReferenceQueue.java:218)
        at com.sun.jna.internal.Cleaner$CleanerThread.run(Cleaner.java:154)

   Locked ownable synchronizers:
        - None

"Worker-0" #48 [31020] prio=5 os_prio=0 cpu=0.00ms elapsed=3177.22s tid=0x00000244678d3200 nid=31020 in Object.wait()  [0x000000d6762ff000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
        at java.lang.Object.wait0([email protected]/Native Method)
        - waiting on <no object reference available>
        at java.lang.Object.wait([email protected]/Object.java:366)
        at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:200)
        - locked <0x0000000705323330> (a org.eclipse.core.internal.jobs.WorkerPool)
        at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:242)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:58)

   Locked ownable synchronizers:
        - None

"Git Repository Closer" #49 [7340] daemon prio=6 os_prio=0 cpu=0.00ms elapsed=3176.88s tid=0x00000244678d45b0 nid=7340 waiting on condition  [0x000000d6766fe000]
   java.lang.Thread.State: WAITING (parking)
        at jdk.internal.misc.Unsafe.park([email protected]/Native Method)
        - parking to wait for  <0x000000070119e848> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
        at java.util.concurrent.locks.LockSupport.park([email protected]/LockSupport.java:371)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block([email protected]/AbstractQueuedSynchronizer.java:519)
        at java.util.concurrent.ForkJoinPool.unmanagedBlock([email protected]/ForkJoinPool.java:3780)
        at java.util.concurrent.ForkJoinPool.managedBlock([email protected]/ForkJoinPool.java:3725)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await([email protected]/AbstractQueuedSynchronizer.java:1707)
        at java.lang.ref.ReferenceQueue.await([email protected]/ReferenceQueue.java:67)
        at java.lang.ref.ReferenceQueue.remove0([email protected]/ReferenceQueue.java:158)
        at java.lang.ref.ReferenceQueue.remove([email protected]/ReferenceQueue.java:234)
        at org.eclipse.egit.core.RepositoryCache$Closer.run(RepositoryCache.java:453)

   Locked ownable synchronizers:
        - None

"Java indexing" #53 [23972] daemon prio=4 os_prio=-1 cpu=0.00ms elapsed=3173.19s tid=0x00000244699edb20 nid=23972 in Object.wait()  [0x000000d676cff000]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait0([email protected]/Native Method)
        - waiting on <no object reference available>
        at java.lang.Object.wait([email protected]/Object.java:366)
        at java.lang.Object.wait([email protected]/Object.java:339)
        at org.eclipse.jdt.internal.core.search.processing.JobManager.indexerLoop(JobManager.java:502)
        - locked <0x0000000702a02340> (a org.eclipse.jdt.internal.core.search.indexing.IndexManager)
        at org.eclipse.jdt.internal.core.search.processing.JobManager$$Lambda/0x0000024420772fc0.run(Unknown Source)
        at java.lang.Thread.runWith([email protected]/Thread.java:1596)
        at java.lang.Thread.run([email protected]/Thread.java:1583)

   Locked ownable synchronizers:
        - None

"org.eclipse.jdt.internal.ui.text.JavaReconciler" #54 [1532] daemon prio=1 os_prio=-2 cpu=0.00ms elapsed=3172.44s tid=0x000002446a2250a0 nid=1532 waiting for monitor entry  [0x000000d676dfe000]
   java.lang.Thread.State: BLOCKED (on object monitor)
        at org.eclipse.pde.internal.core.PluginModelManager.isInitialized(PluginModelManager.java:488)
        - waiting to lock <0x0000000705322ce8> (a java.lang.Object)
        at org.eclipse.pde.internal.core.RequiredPluginsInitializer.initialize(RequiredPluginsInitializer.java:42)
        at org.eclipse.jdt.internal.core.JavaModelManager.initializeContainer(JavaModelManager.java:3209)
        at org.eclipse.jdt.internal.core.JavaModelManager.getClasspathContainer(JavaModelManager.java:2136)
        at org.eclipse.jdt.core.JavaCore.getClasspathContainer(JavaCore.java:3970)
        at org.eclipse.jdt.internal.core.JavaProject.resolveClasspath(JavaProject.java:3127)
        at org.eclipse.jdt.internal.core.JavaProject.resolveClasspath(JavaProject.java:3291)
        at org.eclipse.jdt.internal.core.JavaProject.getResolvedClasspath(JavaProject.java:2439)
        at org.eclipse.jdt.internal.core.CompilationUnitProblemFinder.isTestSource(CompilationUnitProblemFinder.java:228)
        at org.eclipse.jdt.internal.core.CompilationUnitProblemFinder.process(CompilationUnitProblemFinder.java:265)
        at org.eclipse.jdt.internal.core.CompilationUnitProblemFinder.process(CompilationUnitProblemFinder.java:358)
        at org.eclipse.jdt.internal.core.ReconcileWorkingCopyOperation.makeConsistent(ReconcileWorkingCopyOperation.java:243)
        at org.eclipse.jdt.internal.core.ReconcileWorkingCopyOperation.executeOperation(ReconcileWorkingCopyOperation.java:108)
        at org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperation.java:751)
        at org.eclipse.jdt.internal.core.JavaModelOperation.runOperation(JavaModelOperation.java:816)
        at org.eclipse.jdt.internal.core.CompilationUnit.reconcile(CompilationUnit.java:1419)
        at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.reconcile(JavaReconcilingStrategy.java:132)
        at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy$1.run(JavaReconcilingStrategy.java:94)
        at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:47)
        at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.reconcile(JavaReconcilingStrategy.java:91)
        at org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.initialReconcile(JavaReconcilingStrategy.java:189)
        at org.eclipse.jdt.internal.ui.text.CompositeReconcilingStrategy.initialReconcile(CompositeReconcilingStrategy.java:125)
        at org.eclipse.jdt.internal.ui.text.JavaCompositeReconcilingStrategy.initialReconcile(JavaCompositeReconcilingStrategy.java:139)
        at org.eclipse.jface.text.reconciler.MonoReconciler.initialProcess(MonoReconciler.java:100)
        at org.eclipse.jdt.internal.ui.text.JavaReconciler.initialProcess(JavaReconciler.java:421)
        - locked <0x0000000705900928> (a java.lang.Object)
        at org.eclipse.jface.text.reconciler.AbstractReconciler$BackgroundThread.run(AbstractReconciler.java:177)

   Locked ownable synchronizers:
        - None

"Provisioning Event Dispatcher" #56 [19816] daemon prio=6 os_prio=0 cpu=0.00ms elapsed=3171.16s tid=0x000002446706dd30 nid=19816 in Object.wait()  [0x000000d676efe000]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait0([email protected]/Native Method)
        - waiting on <no object reference available>
        at java.lang.Object.wait([email protected]/Object.java:366)
        at java.lang.Object.wait([email protected]/Object.java:339)
        at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.getNextEvent(EventManager.java:396)
        - locked <0x0000000705324350> (a org.eclipse.osgi.framework.eventmgr.EventManager$EventThread)
        at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:337)

   Locked ownable synchronizers:
        - None

"Provisioning Event Dispatcher" #58 [28596] daemon prio=6 os_prio=0 cpu=0.00ms elapsed=3167.84s tid=0x00000244660e11c0 nid=28596 in Object.wait()  [0x000000d676aff000]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait0([email protected]/Native Method)
        - waiting on <no object reference available>
        at java.lang.Object.wait([email protected]/Object.java:366)
        at java.lang.Object.wait([email protected]/Object.java:339)
        at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.getNextEvent(EventManager.java:396)
        - locked <0x00000007085d84c0> (a org.eclipse.osgi.framework.eventmgr.EventManager$EventThread)
        at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:337)

   Locked ownable synchronizers:
        - None

"HttpClient-1-SelectorManager" #59 [25416] daemon prio=6 os_prio=0 cpu=0.00ms elapsed=3167.62s tid=0x00000244660e0b30 nid=25416 runnable  [0x000000d6770fe000]
   java.lang.Thread.State: RUNNABLE
        at sun.nio.ch.WEPoll.wait([email protected]/Native Method)
        at sun.nio.ch.WEPollSelectorImpl.doSelect([email protected]/WEPollSelectorImpl.java:114)
        at sun.nio.ch.SelectorImpl.lockAndDoSelect([email protected]/SelectorImpl.java:130)
        - locked <0x00000007085d92b0> (a sun.nio.ch.Util$2)
        - locked <0x00000007085d9250> (a sun.nio.ch.WEPollSelectorImpl)
        at sun.nio.ch.SelectorImpl.select([email protected]/SelectorImpl.java:142)
        at jdk.internal.net.http.HttpClientImpl$SelectorManager.run([email protected]/HttpClientImpl.java:1366)

   Locked ownable synchronizers:
        - None

"JFR Recorder Thread" #60 [32276] daemon prio=5 os_prio=0 cpu=0.00ms elapsed=148.47s tid=0x000002446706e3c0 nid=32276 runnable  [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
        - None

"JFR Periodic Tasks" #61 [30068] daemon prio=5 os_prio=0 cpu=0.00ms elapsed=148.22s tid=0x000002446a2222b0 nid=30068 in Object.wait()  [0x000000d6771ff000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
        at java.lang.Object.wait0([email protected]/Native Method)
        - waiting on <no object reference available>
        at java.lang.Object.wait([email protected]/Object.java:366)
        at jdk.jfr.internal.PlatformRecorder.takeNap([email protected]/PlatformRecorder.java:559)
        - locked <0x0000000700587cd0> (a jdk.jfr.internal.JVM$ChunkRotationMonitor)
        at jdk.jfr.internal.PlatformRecorder.periodicTask([email protected]/PlatformRecorder.java:527)
        at jdk.jfr.internal.PlatformRecorder.lambda$startDiskMonitor$1([email protected]/PlatformRecorder.java:446)
        at jdk.jfr.internal.PlatformRecorder$$Lambda/0x0000024420ba88a0.run([email protected]/Unknown Source)
        at java.lang.Thread.runWith([email protected]/Thread.java:1596)
        at java.lang.Thread.run([email protected]/Thread.java:1583)

   Locked ownable synchronizers:
        - None

"RMI TCP Accept-0" #63 [13268] daemon prio=5 os_prio=0 cpu=15.62ms elapsed=147.94s tid=0x00000244679772c0 nid=13268 runnable  [0x000000d6772fe000]
   java.lang.Thread.State: RUNNABLE
        at sun.nio.ch.Net.accept([email protected]/Native Method)
        at sun.nio.ch.NioSocketImpl.accept([email protected]/NioSocketImpl.java:748)
        at java.net.ServerSocket.implAccept([email protected]/ServerSocket.java:698)
        at java.net.ServerSocket.platformImplAccept([email protected]/ServerSocket.java:663)
        at java.net.ServerSocket.implAccept([email protected]/ServerSocket.java:639)
        at java.net.ServerSocket.implAccept([email protected]/ServerSocket.java:585)
        at java.net.ServerSocket.accept([email protected]/ServerSocket.java:543)
        at sun.management.jmxremote.LocalRMIServerSocketFactory$1.accept([email protected]/LocalRMIServerSocketFactory.java:52)
        at sun.rmi.transport.tcp.TCPTransport$AcceptLoop.executeAcceptLoop([email protected]/TCPTransport.java:424)
        at sun.rmi.transport.tcp.TCPTransport$AcceptLoop.run([email protected]/TCPTransport.java:388)
        at java.lang.Thread.runWith([email protected]/Thread.java:1596)
        at java.lang.Thread.run([email protected]/Thread.java:1583)

   Locked ownable synchronizers:
        - <0x00000007004b8e08> (a java.util.concurrent.locks.ReentrantLock$NonfairSync)

"RMI Scheduler(0)" #65 [22880] daemon prio=5 os_prio=0 cpu=0.00ms elapsed=147.91s tid=0x00000244699f3070 nid=22880 waiting on condition  [0x000000d6774fe000]
   java.lang.Thread.State: TIMED_WAITING (parking)
        at jdk.internal.misc.Unsafe.park([email protected]/Native Method)
        - parking to wait for  <0x0000000700498d18> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
        at java.util.concurrent.locks.LockSupport.parkNanos([email protected]/LockSupport.java:269)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos([email protected]/AbstractQueuedSynchronizer.java:1758)
        at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take([email protected]/ScheduledThreadPoolExecutor.java:1182)
        at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take([email protected]/ScheduledThreadPoolExecutor.java:899)
        at java.util.concurrent.ThreadPoolExecutor.getTask([email protected]/ThreadPoolExecutor.java:1070)
        at java.util.concurrent.ThreadPoolExecutor.runWorker([email protected]/ThreadPoolExecutor.java:1130)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run([email protected]/ThreadPoolExecutor.java:642)
        at java.lang.Thread.runWith([email protected]/Thread.java:1596)
        at java.lang.Thread.run([email protected]/Thread.java:1583)

   Locked ownable synchronizers:
        - None

"JMX server connection timeout 66" #66 [21624] daemon prio=5 os_prio=0 cpu=78.12ms elapsed=147.90s tid=0x00000244699ec770 nid=21624 in Object.wait()  [0x000000d6775ff000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
        at java.lang.Object.wait0([email protected]/Native Method)
        - waiting on <no object reference available>
        at java.lang.Object.wait([email protected]/Object.java:366)
        at com.sun.jmx.remote.internal.ServerCommunicatorAdmin$Timeout.run([email protected]/ServerCommunicatorAdmin.java:171)
        - locked <0x00000007004964c8> (a [I)
        at java.lang.Thread.runWith([email protected]/Thread.java:1596)
        at java.lang.Thread.run([email protected]/Thread.java:1583)

   Locked ownable synchronizers:
        - None

"RMI TCP Connection(2)-10.245.1.74" #67 [6184] daemon prio=5 os_prio=0 cpu=5125.00ms elapsed=146.83s tid=0x000002446a3fe2e0 nid=6184 runnable  [0x000000d6740fe000]
   java.lang.Thread.State: RUNNABLE
        at sun.nio.ch.Net.poll([email protected]/Native Method)
        at sun.nio.ch.NioSocketImpl.park([email protected]/NioSocketImpl.java:191)
        at sun.nio.ch.NioSocketImpl.timedRead([email protected]/NioSocketImpl.java:280)
        at sun.nio.ch.NioSocketImpl.implRead([email protected]/NioSocketImpl.java:304)
        at sun.nio.ch.NioSocketImpl.read([email protected]/NioSocketImpl.java:346)
        at sun.nio.ch.NioSocketImpl$1.read([email protected]/NioSocketImpl.java:796)
        at java.net.Socket$SocketInputStream.read([email protected]/Socket.java:1099)
        at java.io.BufferedInputStream.fill([email protected]/BufferedInputStream.java:291)
        at java.io.BufferedInputStream.implRead([email protected]/BufferedInputStream.java:325)
        at java.io.BufferedInputStream.read([email protected]/BufferedInputStream.java:312)
        at java.io.FilterInputStream.read([email protected]/FilterInputStream.java:71)
        at sun.rmi.transport.tcp.TCPTransport.handleMessages([email protected]/TCPTransport.java:580)
        at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0([email protected]/TCPTransport.java:844)
        at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0([email protected]/TCPTransport.java:721)
        at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler$$Lambda/0x0000024420c2ceb0.run([email protected]/Unknown Source)
        at java.security.AccessController.executePrivileged([email protected]/AccessController.java:778)
        at java.security.AccessController.doPrivileged([email protected]/AccessController.java:400)
        at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run([email protected]/TCPTransport.java:720)
        at java.util.concurrent.ThreadPoolExecutor.runWorker([email protected]/ThreadPoolExecutor.java:1144)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run([email protected]/ThreadPoolExecutor.java:642)
        at java.lang.Thread.runWith([email protected]/Thread.java:1596)
        at java.lang.Thread.run([email protected]/Thread.java:1583)

   Locked ownable synchronizers:
        - <0x00000007004cc260> (a java.util.concurrent.locks.ReentrantLock$NonfairSync)
        - <0x0000000706c3c1d0> (a java.util.concurrent.ThreadPoolExecutor$Worker)
        - <0x0000000706c3e258> (a java.util.concurrent.locks.ReentrantLock$NonfairSync)

"RMI TCP Connection(4)-10.245.1.74" #69 [8404] daemon prio=5 os_prio=0 cpu=3718.75ms elapsed=41.04s tid=0x000002446a476420 nid=8404 runnable  [0x000000d6753fe000]
   java.lang.Thread.State: RUNNABLE
        at sun.nio.ch.Net.poll([email protected]/Native Method)
        at sun.nio.ch.NioSocketImpl.park([email protected]/NioSocketImpl.java:191)
        at sun.nio.ch.NioSocketImpl.timedRead([email protected]/NioSocketImpl.java:280)
        at sun.nio.ch.NioSocketImpl.implRead([email protected]/NioSocketImpl.java:304)
        at sun.nio.ch.NioSocketImpl.read([email protected]/NioSocketImpl.java:346)
        at sun.nio.ch.NioSocketImpl$1.read([email protected]/NioSocketImpl.java:796)
        at java.net.Socket$SocketInputStream.read([email protected]/Socket.java:1099)
        at java.io.BufferedInputStream.fill([email protected]/BufferedInputStream.java:291)
        at java.io.BufferedInputStream.implRead([email protected]/BufferedInputStream.java:325)
        at java.io.BufferedInputStream.read([email protected]/BufferedInputStream.java:312)
        at java.io.FilterInputStream.read([email protected]/FilterInputStream.java:71)
        at sun.rmi.transport.tcp.TCPTransport.handleMessages([email protected]/TCPTransport.java:580)
        at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0([email protected]/TCPTransport.java:844)
        at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0([email protected]/TCPTransport.java:721)
        at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler$$Lambda/0x0000024420c2ceb0.run([email protected]/Unknown Source)
        at java.security.AccessController.executePrivileged([email protected]/AccessController.java:778)
        at java.security.AccessController.doPrivileged([email protected]/AccessController.java:400)
        at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run([email protected]/TCPTransport.java:720)
        at java.util.concurrent.ThreadPoolExecutor.runWorker([email protected]/ThreadPoolExecutor.java:1144)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run([email protected]/ThreadPoolExecutor.java:642)
        at java.lang.Thread.runWith([email protected]/Thread.java:1596)
        at java.lang.Thread.run([email protected]/Thread.java:1583)

   Locked ownable synchronizers:
        - <0x0000000706c61738> (a java.util.concurrent.locks.ReentrantLock$NonfairSync)
        - <0x0000000706cbacc8> (a java.util.concurrent.ThreadPoolExecutor$Worker)
        - <0x0000000706cbb310> (a java.util.concurrent.locks.ReentrantLock$NonfairSync)

"VM Thread" os_prio=2 cpu=6781.25ms elapsed=3449.52s tid=0x000002441eca1aa0 nid=27408 runnable  

"GC Thread#0" os_prio=2 cpu=4765.62ms elapsed=3449.53s tid=0x000002447f30e460 nid=20784 runnable  

"GC Thread#1" os_prio=2 cpu=4828.12ms elapsed=3448.87s tid=0x000002446491aba0 nid=14896 runnable  

"GC Thread#2" os_prio=2 cpu=4703.12ms elapsed=3448.87s tid=0x00000244666c1e70 nid=23208 runnable  

"GC Thread#3" os_prio=2 cpu=4484.38ms elapsed=3448.87s tid=0x00000244666c2a20 nid=18440 runnable  

"GC Thread#4" os_prio=2 cpu=4953.12ms elapsed=3448.87s tid=0x000002446658f7b0 nid=26552 runnable  

"GC Thread#5" os_prio=2 cpu=4812.50ms elapsed=3448.87s tid=0x000002446658fb50 nid=19040 runnable  

"GC Thread#6" os_prio=2 cpu=4640.62ms elapsed=3448.87s tid=0x0000024466590700 nid=23376 runnable  

"GC Thread#7" os_prio=2 cpu=4875.00ms elapsed=3448.87s tid=0x0000024466590aa0 nid=18684 runnable  

"GC Thread#8" os_prio=2 cpu=4625.00ms elapsed=3448.87s tid=0x00000244660a07d0 nid=23936 runnable  

"GC Thread#9" os_prio=2 cpu=4500.00ms elapsed=3448.87s tid=0x00000244660a0b70 nid=28608 runnable  

"G1 Main Marker" os_prio=2 cpu=0.00ms elapsed=3449.53s tid=0x000002447f871670 nid=16304 runnable  

"G1 Conc#0" os_prio=2 cpu=6312.50ms elapsed=3449.53s tid=0x000002447f872170 nid=15012 runnable  

"G1 Conc#1" os_prio=2 cpu=6296.88ms elapsed=3447.30s tid=0x000002446658c960 nid=12980 runnable  

"G1 Conc#2" os_prio=2 cpu=6312.50ms elapsed=3447.30s tid=0x000002446658bae0 nid=21448 runnable  

"G1 Refine#0" os_prio=2 cpu=890.62ms elapsed=3449.53s tid=0x000002447fa57040 nid=28908 runnable  

"G1 Service" os_prio=2 cpu=218.75ms elapsed=3449.53s tid=0x000002447fa58870 nid=25336 runnable  

"VM Periodic Task Thread" os_prio=2 cpu=15.62ms elapsed=3449.52s tid=0x000002441ec865f0 nid=10892 waiting on condition  

JNI global refs: 170, weak refs: 45

@jukzi jukzi added the bug Something isn't working label Nov 18, 2024
@jukzi
Copy link
Contributor Author

jukzi commented Nov 18, 2024

maybe related to or duplicate of #1160

@jukzi
Copy link
Contributor Author

jukzi commented Nov 18, 2024

I also sampled the process a bit, snapshot:
eclipse.pde_1481.nps.zip
which does not look like a total deadlock, but like some infinite loop:
image

@jukzi
Copy link
Contributor Author

jukzi commented Nov 18, 2024

Maybe an infinite loop waiting for org.eclipse.equinox.internal.p2.transport.ecf.FileInfoReader.barrier
waitOnSelf() does not synchronize the read on that while org.eclipse.equinox.internal.p2.transport.ecf.FileInfoReader.handleRemoteFileEvent(IRemoteFileSystemEvent) does synchronize for write

@jukzi
Copy link
Contributor Author

jukzi commented Nov 18, 2024

created eclipse-equinox/p2#568

@jukzi jukzi closed this as completed Nov 18, 2024
@jukzi jukzi closed this as not planned Won't fix, can't repro, duplicate, stale Nov 18, 2024
@laeubi laeubi reopened this Dec 17, 2024
@laeubi
Copy link
Contributor

laeubi commented Dec 17, 2024

I have took a look into this and the case is actually (apart from deadlock or not) that the initialization of a Java editor calls into PDE that then resolves the target.

I have reproduced the case and it is very bad behavior because currently an open Java Editor means a lot of things are done before even the IDE ever opens:

  1. Start an Eclipse from the IDE
  2. Open a Java Source file
  3. Close the started Eclipse
  4. Put a break point in org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitEditor.doSetInput(IEditorInput)
  5. you see that no UI shows when you hit the breakpoint

Now many non trivial things happen the most "bad one" seem that we enter:

org.eclipse.jdt.internal.core.DeltaProcessor.fire(IJavaElementDelta, int)

what synchronously calls listeners that update the Package Explorer what calls

org.eclipse.jdt.internal.core.PackageFragmentRoot.getRawClasspathEntry()

that has this line

project.getResolvedClasspath(); // force the reverse rawEntry cache to be populated

that then triggers PDE target resolution in the UI thread and before the IDE has a chance to start!

I have opened:

@laeubi
Copy link
Contributor

laeubi commented Dec 17, 2024

If I disable all mentioned places my IDE starts up even if I put a breakpoint in org.eclipse.pde.internal.core.RequiredPluginsInitializer.initialize(IPath, IJavaProject) to simulate a very long (potentially forever) running operation. The IDE also feels to start faster, but I have not measured that in detail.

laeubi added a commit to laeubi/eclipse.pde that referenced this issue Dec 17, 2024
Currently there are some bad behaving UI components in the eclipse IDE
that trigger resolving of the classpath containers in the UI, this leads
to very bad startup performance and even deadlocks in startup.

This now detects the issue, logs a warning of the offending component
and defer the initialization of classpath to a background job, this
currently increase time from starting eclipse until UI is shown
noticeable.

Fix eclipse-pde#1481
laeubi added a commit to laeubi/eclipse.pde that referenced this issue Dec 17, 2024
Currently there are some bad behaving UI components in the eclipse IDE
that trigger resolving of the classpath containers in the UI, this leads
to very bad startup performance and even deadlocks in startup.

This now detects the issue, logs a warning of the offending component
and defer the initialization of classpath to a background job, this
currently increase time from starting eclipse until UI is shown
noticeable.

Fix eclipse-pde#1481
laeubi added a commit to laeubi/eclipse.pde that referenced this issue Dec 17, 2024
Currently there are some bad behaving UI components in the eclipse IDE
that trigger resolving of the classpath containers in the UI, this leads
to very bad startup performance and even deadlocks in startup.

This now detects the issue, logs a warning of the offending component
and defer the initialization of classpath to a background job, this
currently increase time from starting eclipse until UI is shown
noticeable.

Fix eclipse-pde#1481
@vogella
Copy link
Contributor

vogella commented Dec 17, 2024

The IDE also feels to start faster, but I have not measured that in detail.

An easy way to get the rough startup time is to start Eclipse with the -debug and -data flag, e.g. eclipse -data ~/workspace/test -debug You will see the total startup time in the console. To activate tracing for startup time by bundle you have to add two options to an .options file, see https://www.vogella.com/tutorials/EclipsePerformance/article.html#example-tracing-the-startup-time-of-plug-ins

@HannesWell
Copy link
Member

@jukzi would it be possible in JDT(-UI) to 'just' defer the heavy initialization done for an editor to a background thread, to solve this issue at it's root? See also my comment in #1525 (review).

@jukzi
Copy link
Contributor Author

jukzi commented Dec 18, 2024

@jukzi would it be possible in JDT(-UI) to 'just' defer the heavy initialization done for an editor to a background thread,

sure, just propose a solution for eclipse-jdt/eclipse.jdt.ui#1860

laeubi added a commit to laeubi/eclipse.pde that referenced this issue Dec 27, 2024
Currently there are some bad behaving UI components in the eclipse IDE
that trigger resolving of the classpath containers in the UI, this leads
to very bad startup performance and even deadlocks in startup.

This now detects the issue, logs a warning of the offending component
and defer the initialization of classpath to a background job, this
currently increase time from starting eclipse until UI is shown
noticeable.

Fix eclipse-pde#1481
laeubi added a commit to laeubi/eclipse.pde that referenced this issue Jan 6, 2025
Currently there are some bad behaving UI components in the eclipse IDE
that trigger resolving of the classpath containers in the UI, this leads
to very bad startup performance and even deadlocks in startup.

This now detects the issue, logs a warning of the offending component
and defer the initialization of classpath to a background job, this
currently increase time from starting eclipse until UI is shown
noticeable.

Fix eclipse-pde#1481
laeubi added a commit to laeubi/eclipse.pde that referenced this issue Jan 6, 2025
Currently there are some bad behaving UI components in the eclipse IDE
that trigger resolving of the classpath containers in the UI, this leads
to very bad startup performance and even deadlocks in startup.

This now detects the issue, logs a warning of the offending component
and defer the initialization of classpath to a background job, this
currently increase time from starting eclipse until UI is shown
noticeable.

Fix eclipse-pde#1481
@laeubi laeubi removed the bug Something isn't working label Jan 6, 2025
@laeubi
Copy link
Contributor

laeubi commented Jan 6, 2025

As analysis has shown this is not a PDE but JDT issue, so if anything is left pleas reopen there.

@laeubi laeubi closed this as not planned Won't fix, can't repro, duplicate, stale Jan 6, 2025
laeubi added a commit to laeubi/eclipse.pde that referenced this issue Jan 7, 2025
Currently there are some bad behaving UI components in the eclipse IDE
that trigger resolving of the classpath containers in the process of
creating the UI, this leads to very bad startup performance and even
deadlocks in startup.

This now detects the issue, logs a warning of the offending component
and defer the initialization of classpath to a background job, this
currently decrease time from starting eclipse until UI is shown
noticeable.

Fix eclipse-pde#1481
@laeubi
Copy link
Contributor

laeubi commented Jan 7, 2025

I have now further investigated why the deadlock itself occurs, the reason is that

org.eclipse.ui.internal.ide.application.IDEApplication.start(IApplicationContext)

is calling Job.getJobManager().suspend();

now you get to the unlucky state that the join will return immediately but the job has not run at all, so it enter the loop again and again and can never exit...

jukzi pushed a commit to jukzi/eclipse.platform.ui that referenced this issue Jan 7, 2025
Because of possible deadlock when Javaeditor from JDT calls PDE calls
OOMPH calls P2 to download new target platform waiting for a Job that is
not executed because JobManager is suspendend

eclipse-pde/eclipse.pde#1481

Was already suggested in
https://bugs.eclipse.org/bugs/show_bug.cgi?id=514090
jukzi pushed a commit to jukzi/eclipse.platform.ui that referenced this issue Jan 8, 2025
Because of possible deadlock when Javaeditor from JDT calls PDE calls
OOMPH calls P2 to download new target platform waiting for a Job that is
not executed because JobManager is suspendend

eclipse-pde/eclipse.pde#1481

Was already suggested in
https://bugs.eclipse.org/bugs/show_bug.cgi?id=514090

Old behavior can be used by setting VM property
-Dorg.eclipse.ui.suspendJobManagerDuringStart=true
@laeubi
Copy link
Contributor

laeubi commented Jan 10, 2025

Now we see the following Stacktrace when the problem occurs:

"main" #1 [8598] prio=6 os_prio=0 cpu=8209,80ms elapsed=50,58s tid=0x00007f984c032860 nid=8598 waiting on condition  [0x00007f9850f18000]
   java.lang.Thread.State: TIMED_WAITING (parking)
	at jdk.internal.misc.Unsafe.park(java.base@21/Native Method)
	- parking to wait for  <0x0000000721f27e68> (a java.util.concurrent.CountDownLatch$Sync)
	at java.util.concurrent.locks.LockSupport.parkNanos(java.base@21/LockSupport.java:269)
	at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(java.base@21/AbstractQueuedSynchronizer.java:756)
	at java.util.concurrent.locks.AbstractQueuedSynchronizer.tryAcquireSharedNanos(java.base@21/AbstractQueuedSynchronizer.java:1126)
	at java.util.concurrent.CountDownLatch.await(java.base@21/CountDownLatch.java:276)
	at org.eclipse.equinox.internal.p2.transport.ecf.FileInfoReader.getLastModified(FileInfoReader.java:86)
	at org.eclipse.equinox.internal.p2.transport.ecf.RepositoryTransport.getLastModified(RepositoryTransport.java:275)
	at org.eclipse.equinox.internal.p2.repository.CacheManager.createCacheFromFile(CacheManager.java:109)
	at org.eclipse.equinox.internal.p2.metadata.repository.XZedSimpleMetadataRepositoryFactory.getLocalFile(XZedSimpleMetadataRepositoryFactory.java:60)
	at org.eclipse.equinox.internal.p2.metadata.repository.XZedSimpleMetadataRepositoryFactory.load(XZedSimpleMetadataRepositoryFactory.java:80)
	at org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryManager.factoryLoad(MetadataRepositoryManager.java:63)
	at org.eclipse.equinox.internal.p2.repository.helpers.AbstractRepositoryManager.loadRepository(AbstractRepositoryManager.java:799)
	at org.eclipse.equinox.internal.p2.repository.helpers.AbstractRepositoryManager.loadRepository(AbstractRepositoryManager.java:697)
	at org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryManager.loadRepository(MetadataRepositoryManager.java:110)
	at org.eclipse.equinox.internal.p2.metadata.repository.MetadataRepositoryManager.loadRepository(MetadataRepositoryManager.java:105)
	at org.eclipse.pde.internal.core.target.P2TargetUtils.getQueryableMetadata(P2TargetUtils.java:1019)
	at org.eclipse.pde.internal.core.target.P2TargetUtils.getQueryableMetadata(P2TargetUtils.java:984)
	at org.eclipse.pde.internal.core.target.IUBundleContainer.getRootIUs(IUBundleContainer.java:769)
	at org.eclipse.pde.internal.core.target.P2TargetUtils.getRootIUs(P2TargetUtils.java:1588)
	at org.eclipse.pde.internal.core.target.P2TargetUtils.resolveWithSlicer(P2TargetUtils.java:1340)
	at org.eclipse.pde.internal.core.target.P2TargetUtils.synchronize(P2TargetUtils.java:824)
	- locked <0x000000072a4e6908> (a org.eclipse.pde.internal.core.target.P2TargetUtils)
	at org.eclipse.pde.internal.core.target.TargetDefinition.lambda$3(TargetDefinition.java:395)
	at org.eclipse.pde.internal.core.target.TargetDefinition$$Lambda/0x00007f97d8a34428.accept(Unknown Source)
	at java.util.HashMap.forEach(java.base@21/HashMap.java:1429)
	at org.eclipse.pde.internal.core.target.TargetDefinition.resolve(TargetDefinition.java:392)
	at org.eclipse.oomph.targlets.internal.core.TargletContainer$ComposedTargetContent.resolve(TargletContainer.java:1395)
	at org.eclipse.oomph.targlets.internal.core.TargletContainer.generateUnits(TargletContainer.java:689)
	at org.eclipse.oomph.targlets.internal.core.TargletContainer.resolveUnits(TargletContainer.java:652)
	at org.eclipse.oomph.targlets.internal.core.TargletContainer.resolveBundles(TargletContainer.java:598)
	at org.eclipse.pde.internal.core.target.AbstractBundleContainer.resolve(AbstractBundleContainer.java:97)
	at org.eclipse.pde.internal.core.target.TargetDefinition.resolve(TargetDefinition.java:379)
	at org.eclipse.pde.internal.core.TargetPlatformHelper.getWorkspaceTargetResolved(TargetPlatformHelper.java:565)
	at org.eclipse.pde.internal.core.PluginModelManager.getExternalBundles(PluginModelManager.java:649)
	at org.eclipse.pde.internal.core.PluginModelManager.initializeTable(PluginModelManager.java:572)
	at org.eclipse.pde.internal.core.PluginModelManager.findModel(PluginModelManager.java:1037)
	- locked <0x000000073e600f10> (a java.lang.Object)
	at org.eclipse.pde.internal.core.RequiredPluginsInitializer.initialize(RequiredPluginsInitializer.java:50)
	at org.eclipse.jdt.internal.core.JavaModelManager.initializeContainer(JavaModelManager.java:3223)
	at org.eclipse.jdt.internal.core.JavaModelManager.getClasspathContainer(JavaModelManager.java:2150)
	at org.eclipse.jdt.core.JavaCore.getClasspathContainer(JavaCore.java:3970)
	at org.eclipse.jdt.internal.core.JavaProject.resolveClasspath(JavaProject.java:3137)
	at org.eclipse.jdt.internal.core.JavaProject.resolveClasspath(JavaProject.java:3301)
	at org.eclipse.jdt.internal.core.JavaProject.getResolvedClasspath(JavaProject.java:2415)
	at org.eclipse.jdt.internal.core.PackageFragmentRoot.getRawClasspathEntry(PackageFragmentRoot.java:616)
	at org.eclipse.jdt.internal.ui.packageview.PackageExplorerContentProvider.internalGetParent(PackageExplorerContentProvider.java:381)
	at org.eclipse.jdt.internal.ui.packageview.PackageExplorerContentProvider.processDelta(PackageExplorerContentProvider.java:734)
	at org.eclipse.jdt.internal.ui.packageview.PackageExplorerContentProvider.handleAffectedChildren(PackageExplorerContentProvider.java:815)
	at org.eclipse.jdt.internal.ui.packageview.PackageExplorerContentProvider.processDelta(PackageExplorerContentProvider.java:758)
	at org.eclipse.jdt.internal.ui.packageview.PackageExplorerContentProvider.handleAffectedChildren(PackageExplorerContentProvider.java:815)
	at org.eclipse.jdt.internal.ui.packageview.PackageExplorerContentProvider.processDelta(PackageExplorerContentProvider.java:758)
	at org.eclipse.jdt.internal.ui.packageview.PackageExplorerContentProvider.elementChanged(PackageExplorerContentProvider.java:139)
	at org.eclipse.jdt.internal.core.DeltaProcessor$3.run(DeltaProcessor.java:1751)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:47)
	at org.eclipse.jdt.internal.core.DeltaProcessor.notifyListeners(DeltaProcessor.java:1739)
	at org.eclipse.jdt.internal.core.DeltaProcessor.firePostChangeDelta(DeltaProcessor.java:1572)
	at org.eclipse.jdt.internal.core.DeltaProcessor.fire(DeltaProcessor.java:1548)
	at org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperation.java:791)
	at org.eclipse.jdt.internal.core.JavaModelOperation.runOperation(JavaModelOperation.java:816)
	at org.eclipse.jdt.internal.core.CompilationUnit.becomeWorkingCopy(CompilationUnit.java:115)
	at org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitDocumentProvider.createFileInfo(CompilationUnitDocumentProvider.java:1015)
	at org.eclipse.ui.editors.text.TextFileDocumentProvider.connect(TextFileDocumentProvider.java:481)
	at org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitDocumentProvider.connect(CompilationUnitDocumentProvider.java:1253)
	at org.eclipse.ui.texteditor.AbstractTextEditor.doSetInput(AbstractTextEditor.java:4187)
	at org.eclipse.ui.texteditor.StatusTextEditor.doSetInput(StatusTextEditor.java:262)
	at org.eclipse.ui.texteditor.AbstractDecoratedTextEditor.doSetInput(AbstractDecoratedTextEditor.java:1526)
	at org.eclipse.jdt.internal.ui.javaeditor.JavaEditor.internalDoSetInput(JavaEditor.java:2567)
	at org.eclipse.jdt.internal.ui.javaeditor.JavaEditor.doSetInput(JavaEditor.java:2540)
	at org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitEditor.doSetInput(CompilationUnitEditor.java:1410)
	at org.eclipse.ui.texteditor.AbstractTextEditor.lambda$1(AbstractTextEditor.java:3171)
	at org.eclipse.ui.texteditor.AbstractTextEditor$$Lambda/0x00007f97d87cd568.run(Unknown Source)
	at org.eclipse.ui.internal.WorkbenchWindow.run(WorkbenchWindow.java:2285)
	at org.eclipse.ui.texteditor.AbstractTextEditor.internalInit(AbstractTextEditor.java:3188)
	at org.eclipse.ui.texteditor.AbstractTextEditor.init(AbstractTextEditor.java:3213)
	at org.eclipse.ui.internal.EditorReference.initialize(EditorReference.java:353)
	at org.eclipse.ui.internal.e4.compatibility.CompatibilityPart.create(CompatibilityPart.java:344)
	at java.lang.invoke.LambdaForm$DMH/0x00007f97d8001400.invokeVirtual(java.base@21/LambdaForm$DMH)
	at java.lang.invoke.LambdaForm$MH/0x00007f97d80b8400.invoke(java.base@21/LambdaForm$MH)
	at java.lang.invoke.Invokers$Holder.invokeExact_MT(java.base@21/Invokers$Holder)
	at jdk.internal.reflect.DirectMethodHandleAccessor.invokeImpl(java.base@21/DirectMethodHandleAccessor.java:153)
	at jdk.internal.reflect.DirectMethodHandleAccessor.invoke(java.base@21/DirectMethodHandleAccessor.java:103)
	at java.lang.reflect.Method.invoke(java.base@21/Method.java:580)
	at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:56)
	at org.eclipse.e4.core.internal.di.InjectorImpl.processAnnotated(InjectorImpl.java:977)
	at org.eclipse.e4.core.internal.di.InjectorImpl.processAnnotated(InjectorImpl.java:939)
	at org.eclipse.e4.core.internal.di.InjectorImpl.internalInject(InjectorImpl.java:139)
	at org.eclipse.e4.core.internal.di.InjectorImpl.internalMake(InjectorImpl.java:386)
	at org.eclipse.e4.core.internal.di.InjectorImpl.make(InjectorImpl.java:312)
	at org.eclipse.e4.core.contexts.ContextInjectionFactory.make(ContextInjectionFactory.java:203)
	at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.createFromBundle(ReflectionContributionFactory.java:90)
	at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.doCreate(ReflectionContributionFactory.java:59)
	at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.create(ReflectionContributionFactory.java:42)
	at org.eclipse.e4.ui.workbench.renderers.swt.ContributedPartRenderer.createWidget(ContributedPartRenderer.java:134)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createWidget(PartRenderingEngine.java:991)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:658)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:762)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:727)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:47)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:711)
	at org.eclipse.e4.ui.workbench.renderers.swt.StackRenderer.showTab(StackRenderer.java:1389)
	at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.postProcess(LazyStackRenderer.java:114)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:762)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:727)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:47)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:711)
	at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:72)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:672)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$1.run(PartRenderingEngine.java:543)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:47)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:527)
	at org.eclipse.e4.ui.workbench.renderers.swt.ElementReferenceRenderer.createWidget(ElementReferenceRenderer.java:73)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createWidget(PartRenderingEngine.java:991)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:658)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:762)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:727)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:47)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:711)
	at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:72)
	at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:147)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:672)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:762)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:727)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:47)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:711)
	at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:72)
	at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:147)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:672)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:762)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:727)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:47)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:711)
	at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:72)
	at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:147)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:672)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:762)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:727)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:47)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:711)
	at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:72)
	at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveRenderer.processContents(PerspectiveRenderer.java:48)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:672)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:762)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:727)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:47)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:711)
	at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveStackRenderer.showTab(PerspectiveStackRenderer.java:79)
	at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.postProcess(LazyStackRenderer.java:114)
	at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveStackRenderer.postProcess(PerspectiveStackRenderer.java:61)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:676)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:762)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:727)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:47)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:711)
	at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:72)
	at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:147)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:672)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:762)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:727)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:47)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:711)
	at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:72)
	at org.eclipse.e4.ui.workbench.renderers.swt.WBWRenderer.processContents(WBWRenderer.java:662)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:672)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:762)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:727)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:47)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:711)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1079)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:339)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1042)
	at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:153)
	at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:663)
	at org.eclipse.ui.internal.Workbench$$Lambda/0x00007f97d828fc28.run(Unknown Source)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:339)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:570)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:173)
	at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:178)
	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:208)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:143)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:109)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:439)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:271)
	at java.lang.invoke.DirectMethodHandle$Holder.invokeStatic(java.base@21/DirectMethodHandle$Holder)
	at java.lang.invoke.LambdaForm$MH/0x00007f97d8007800.invoke(java.base@21/LambdaForm$MH)
	at java.lang.invoke.LambdaForm$MH/0x00007f97d8007c00.invokeExact_MT(java.base@21/LambdaForm$MH)
	at jdk.internal.reflect.DirectMethodHandleAccessor.invokeImpl(java.base@21/DirectMethodHandleAccessor.java:155)
	at jdk.internal.reflect.DirectMethodHandleAccessor.invoke(java.base@21/DirectMethodHandleAccessor.java:103)
	at java.lang.reflect.Method.invoke(java.base@21/Method.java:580)
	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:668)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:605)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1481)
	at org.eclipse.equinox.launcher.Main.main(Main.java:1454)

@jukzi is there any way out of this state or is it permanent?

@laeubi
Copy link
Contributor

laeubi commented Jan 10, 2025

What I did now was:

  1. open runtime-workspace/.metadata/.plugins/org.eclipse.e4.workbench
  2. search for org.eclipse.e4.ui.compatibility.editor
  3. delete all child elements
    but thats obviously nothing one wants to do on a regular basis

As an alternative, delete "workbench.xmi" but one would loose all customizations :-\

@jukzi
Copy link
Contributor Author

jukzi commented Jan 10, 2025

@jukzi is there any way out of this state or is it permanent?

I don't know any way for the user to cancel it and it happens again on every restart. The user can only select another workspace.
The stacktrace reads like the browseRequest could need to have latch.CountDown in a final block and it would be good to not wait endlessly but timeout after some seconds.
But the main problem here seems to be that org.eclipse.ecf.provider.filetransfer.browse.AbstractFileSystemBrowser.sendBrowseRequest() still uses Job.schedule whiich will not work with a suspended JobManager!

@merks
Copy link
Contributor

merks commented Jan 10, 2025

I expect running with clearPersistedState will allow the IDE to start "fresh" but with the same workspace.

Another interesting question is how is it that the current target platform is not resolved upon startup?

image

Wasn't it resolve before shutdown?

@laeubi
Copy link
Contributor

laeubi commented Jan 10, 2025

org.eclipse.ecf.provider.filetransfer.browse.AbstractFileSystemBrowser.sendBrowseRequest() still uses Job.schedule whiich will not work with a suspended JobManager!

see eclipse-ecf/ecf#154

Wasn't it resolve before shutdown?

The target platform needs to be resolved each time the IDE starts (but should be quite fast as everything is cached hopefully).

@merks
Copy link
Contributor

merks commented Jan 10, 2025

To answer my own question, it seems a bit of a design flaw in org.eclipse.pde.internal.core.target.AbstractBundleContainer.isResolved() which is final and is effectively the only implementation of ITargetLocation from which all other implementations derive.

image

These are the only places that set fResolutionStatus to a non-null value:

image

Oomph targlets support rollback so generally would never need to be (re)resolved on startup. So this unfortunate chain of events is entirely avoidable, though I expect most likely every ITargetLocation suffers from this problem of not being considered resolved initially.

@merks
Copy link
Contributor

merks commented Jan 10, 2025

Note when I was in this state in the debugger, nothing got hung up. I'll debug deeper, time permitting.

Also note that Oomph has some horrible dirty hacks around this topic:

  private static boolean canResolve()
  {
    boolean isJobManagerSuspended = Job.getJobManager().isSuspended();
    if (isJobManagerSuspended)
    {
      // We can't expect scheduled jobs to run, and we need that to load repositories.
      // So we can't resolve in this case.
      return false;
    }

    try
    {
      Class<?> displayClass = CommonPlugin.loadClass("org.eclipse.swt", "org.eclipse.swt.widgets.Display"); //$NON-NLS-1$ //$NON-NLS-2$
      Method getCurrentMethod = ReflectUtil.getMethod(displayClass, "getCurrent"); //$NON-NLS-1$
      boolean isDisplayThread = ReflectUtil.invokeMethod(getCurrentMethod, null) != null;
      if (isDisplayThread)
      {
        // We should never do a resolve in the display thread.
        // The UI will hang for a long time, and it won't be possible to cancel progress.
        // So we can't resolve in this case.
        return false;
      }

      Class<?> platformUIClass = CommonPlugin.loadClass("org.eclipse.ui.workbench", "org.eclipse.ui.PlatformUI"); //$NON-NLS-1$ //$NON-NLS-2$
      Object workbench = ReflectUtil.invokeMethod("getWorkbench", platformUIClass); //$NON-NLS-1$
      boolean isWorkbenchStarting = (Boolean)ReflectUtil.invokeMethod("isStarting", workbench); //$NON-NLS-1$
      if (isWorkbenchStarting)
      {
        // In Oxygen, the new Java indexer starts very early.
        // At this point the job manager will be suspended, or is is about to be suspended because the workbench is starting its life cycle.
        // So we can't resolve in this case.
        return false;
      }
    }
    catch (Throwable ex)
    {
      //$FALL-THROUGH$
    }

    // All is good and we can resolve now on this thread.
    return true;
  }

I expect that when the support for composed targets was added to targlets that those are not similarly guarded. As I mentioned, in general there is a profile containing the resolution so we should not need to access the internet but are best off to fall back to the profile or remain in an unresolved state without attempting to access the internet.

@laeubi
Copy link
Contributor

laeubi commented Jan 10, 2025

To answer my own question, it seems a bit of a design flaw in org.eclipse.pde.internal.core.target.AbstractBundleContainer.isResolved() which is final and is effectively the only implementation of ITargetLocation from which all other implementations derive.

Its an internal class so actually no one ever should derive from it :-P

In any case, we can of course remove the final here, but I think you have a wrong impression about what "resolved" means. If I restart the JVM then all objects are gone and the TargetLocation is created as a new object, so one need to "resolve" (== create new objects that holds the bundles and features information) always, there is no real way around it independent how smart a location is.

But lets assume your XML > TargetLocation is really smart and wants to be considered from the start on you can set fResolutionStatus to OK status as it is a protected field.

@laeubi
Copy link
Contributor

laeubi commented Jan 10, 2025

Also note that Oomph has some horrible dirty hacks around this topic:

That's exactly what I did here (before) and where flamed for doing bad things an the whole PDE will go to death:

now everyone complains that this never could have happened, so it seem we both are at a very unfortunate alternative time line these days :-P

@laeubi
Copy link
Contributor

laeubi commented Jan 10, 2025

Note when I was in this state in the debugger, nothing got hung up. I'll debug deeper, time permitting.

Just some things must happen:

  1. Job Manager disabled (that is only in the very early stage of IDE startup)
  2. And P2 decides to check for an update (maybe through a linked oomph targlet)
  3. And you have an java editor open
  4. With "link with editor" enabled

but I was not able to trigger this behavior directly as well, I just put some break point in the code to "simulate" a long (or possibly running forever) operation.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

5 participants