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

UI Freeze on open LaunchConfigurations dialog while the target platform is being resolved #1567

Open
jukzi opened this issue Jan 16, 2025 · 6 comments
Labels
performance Performance issues regression Regression defect

Comments

@jukzi
Copy link
Contributor

jukzi commented Jan 16, 2025

A workspace that used to not start, now froze the UI for ~2min when in opened LaunchConfigurations Dialog, progress bar shows "initializing plug-in models"

Image

probably regression from #1552

threaddump shows a lot of tasks that should happen in the background only:

"main" #1 [23548] prio=6 os_prio=0 cpu=13921.88ms elapsed=1751.39s tid=0x0000023192146490 nid=23548 waiting for monitor entry  [0x000000c52b8fc000]
   java.lang.Thread.State: BLOCKED (on object monitor)
        at org.eclipse.pde.internal.core.PluginModelManager.getWorkspaceModels(PluginModelManager.java:1184)
        - waiting to lock <0x0000000745bc9850> (a java.lang.Object)
        at org.eclipse.pde.core.plugin.PluginRegistry.getWorkspaceModels(PluginRegistry.java:247)
        at org.eclipse.pde.internal.core.PDEExtensionRegistry.getModels(PDEExtensionRegistry.java:76)
        at org.eclipse.pde.internal.core.PDERegistryStrategy.getContributionsTimestamp(PDERegistryStrategy.java:328)
        at org.eclipse.core.internal.registry.ExtensionRegistry.<init>(ExtensionRegistry.java:748)
        at org.eclipse.core.runtime.RegistryFactory.createRegistry(RegistryFactory.java:69)
        at org.eclipse.pde.internal.core.PDEExtensionRegistry.createRegistry(PDEExtensionRegistry.java:104)
        at org.eclipse.pde.internal.core.PDEExtensionRegistry.getRegistry(PDEExtensionRegistry.java:95)
        - locked <0x00000007a18f4f68> (a org.eclipse.pde.internal.core.PDEExtensionRegistry)
        at org.eclipse.pde.internal.core.PDEExtensionRegistry.getExtensionPoint(PDEExtensionRegistry.java:155)
        at org.eclipse.pde.internal.core.PDEExtensionRegistry.findExtensions(PDEExtensionRegistry.java:228)
        at org.eclipse.pde.internal.core.TargetPlatformHelper.getProductNameSet(TargetPlatformHelper.java:325)
        at org.eclipse.pde.internal.core.TargetPlatformHelper.getProductNames(TargetPlatformHelper.java:335)
        at org.eclipse.pde.core.plugin.TargetPlatform.getProducts(TargetPlatform.java:184)
        at org.eclipse.pde.internal.ui.launcher.ProgramBlock.createProductSection(ProgramBlock.java:118)
        at org.eclipse.pde.internal.ui.launcher.ProgramBlock.createControl(ProgramBlock.java:109)
        at org.eclipse.pde.ui.launcher.MainTab.createControl(MainTab.java:90)
        at org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationTabGroupViewer.showInstanceTabsFor(LaunchConfigurationTabGroupViewer.java:926)
        at org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationTabGroupViewer.displayInstanceTabs(LaunchConfigurationTabGroupViewer.java:846)
        at org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationTabGroupViewer.lambda$4(LaunchConfigurationTabGroupViewer.java:730)
        at org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationTabGroupViewer$$Lambda/0x00000231b5012740.run(Unknown Source)
        at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:67)
        at org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationTabGroupViewer.inputChanged(LaunchConfigurationTabGroupViewer.java:716)
        at org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationTabGroupViewer.setInput0(LaunchConfigurationTabGroupViewer.java:684)
        at org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationTabGroupViewer.setInput(LaunchConfigurationTabGroupViewer.java:664)
        at org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationsDialog.handleLaunchConfigurationSelectionChanged(LaunchConfigurationsDialog.java:1043)
        at org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationsDialog.lambda$1(LaunchConfigurationsDialog.java:607)
        at org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationsDialog$$Lambda/0x00000231b5010c78.selectionChanged(Unknown Source)
        at org.eclipse.jface.viewers.StructuredViewer$3.run(StructuredViewer.java:820)
        at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:47)
        at org.eclipse.ui.internal.JFaceUtil$$Lambda/0x00000231b41b0c40.run(Unknown Source)
        at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:174)
        at org.eclipse.jface.viewers.StructuredViewer.firePostSelectionChanged(StructuredViewer.java:817)
        at org.eclipse.jface.viewers.ColumnViewer.firePostSelectionChanged(ColumnViewer.java:1065)
        at org.eclipse.jface.viewers.StructuredViewer.setSelection(StructuredViewer.java:1665)
        at org.eclipse.jface.viewers.TreeViewer.setSelection(TreeViewer.java:1091)
        at org.eclipse.jface.viewers.Viewer.setSelection(Viewer.java:375)
        at org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationsDialog.doInitialTreeSelection(LaunchConfigurationsDialog.java:653)
        at org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationsDialog.initializeContent(LaunchConfigurationsDialog.java:1177)
        at org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationsDialog.createContents(LaunchConfigurationsDialog.java:468)
        at org.eclipse.jface.window.Window.create(Window.java:431)
        at org.eclipse.jface.dialogs.Dialog.create(Dialog.java:1092)
        at org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationsDialog.create(LaunchConfigurationsDialog.java:377)
        at org.eclipse.jface.window.Window.open(Window.java:788)
        at org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationsDialog.open(LaunchConfigurationsDialog.java:1230)
        at org.eclipse.debug.ui.DebugUITools.lambda$1(DebugUITools.java:630)
        at org.eclipse.debug.ui.DebugUITools$$Lambda/0x00000231b4ffe760.run(Unknown Source)
        at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:67)
        at org.eclipse.debug.ui.DebugUITools.openLaunchConfigurationDialogOnGroup(DebugUITools.java:636)
        at org.eclipse.debug.ui.DebugUITools.openLaunchConfigurationDialogOnGroup(DebugUITools.java:574)
        at org.eclipse.debug.ui.actions.OpenLaunchDialogAction.run(OpenLaunchDialogAction.java:85)
        at org.eclipse.jface.action.Action.runWithEvent(Action.java:474)
        at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:581)
        at org.eclipse.jface.action.ActionContributionItem.lambda$4(ActionContributionItem.java:415)
        at org.eclipse.jface.action.ActionContributionItem$$Lambda/0x00000231b46f4000.handleEvent(Unknown Source)
        at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:91)
        at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4302)
        at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1208)
        at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4100)
        at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3688)
        at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1151)
        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:665)
        at org.eclipse.ui.internal.Workbench$$Lambda/0x00000231b43607d0.run(Unknown Source)
        at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:339)
        at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:572)
        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/0x00000231b4007800.invoke([email protected]/LambdaForm$MH)
        at java.lang.invoke.LambdaForm$MH/0x00000231b4007c00.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

...

"Worker-1" #79 [23788] prio=5 os_prio=0 cpu=10937.50ms elapsed=140.50s tid=0x00000231fe971020 nid=23788 in Object.wait()  [0x000000c52efff000]
   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 <0x0000000741400090> (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

"Worker-2: Initializing plug-in models" #80 [15128] prio=5 os_prio=0 cpu=0.00ms elapsed=140.50s tid=0x00000231fe96c7f0 nid=15128 in Object.wait()  [0x000000c52f0ff000]
   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.Semaphore.acquire(Semaphore.java:45)
        - locked <0x000000074a65a770> (a org.eclipse.core.internal.jobs.Semaphore)
        at org.eclipse.core.internal.jobs.JobManager.join(JobManager.java:1000)
        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.pde.internal.core.RequiredPluginsInitializer.setupClasspath(RequiredPluginsInitializer.java:62)
        at org.eclipse.pde.internal.core.RequiredPluginsInitializer.lambda$1(RequiredPluginsInitializer.java:46)
        at org.eclipse.pde.internal.core.RequiredPluginsInitializer$$Lambda/0x00000231b4994c70.run(Unknown Source)
        at org.eclipse.core.runtime.jobs.Job$2.run(Job.java:187)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)

   Locked ownable synchronizers:
        - None


"Worker-4: Initializing Java Tooling" #82 [29484] prio=5 os_prio=0 cpu=93.75ms elapsed=140.50s tid=0x00000231fe96ce80 nid=29484 waiting for monitor entry  [0x000000c52f2fe000]
   java.lang.Thread.State: BLOCKED (on object monitor)
        at org.eclipse.pde.internal.core.PluginModelManager.isInitialized(PluginModelManager.java:493)
        - waiting to lock <0x0000000745bc9850> (a java.lang.Object)
        at org.eclipse.pde.internal.core.RequiredPluginsInitializer.setupClasspath(RequiredPluginsInitializer.java:59)
        at org.eclipse.pde.internal.core.RequiredPluginsInitializer.initialize(RequiredPluginsInitializer.java:51)
        at org.eclipse.jdt.internal.core.JavaModelManager.initializeContainer(JavaModelManager.java:3223)
        at org.eclipse.jdt.internal.core.JavaModelManager$11.run(JavaModelManager.java:3111)
        at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2457)
        at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2482)
        at org.eclipse.jdt.internal.core.JavaModelManager.initializeAllContainers(JavaModelManager.java:3169)
        at org.eclipse.jdt.internal.core.JavaModelManager.getClasspathContainer(JavaModelManager.java:2145)
        at org.eclipse.jdt.core.JavaCore.initializeAfterLoad(JavaCore.java:4752)
        at org.eclipse.jdt.internal.ui.InitializeAfterLoadJob$RealJob.run(InitializeAfterLoadJob.java:39)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)

   Locked ownable synchronizers:
        - None

"Worker-6: File Transport Reader" #84 [20028] prio=5 os_prio=0 cpu=1187.50ms elapsed=140.50s tid=0x00000231fe96d510 nid=20028 waiting on condition  [0x000000c52f4fe000]
   java.lang.Thread.State: WAITING (parking)
        at jdk.internal.misc.Unsafe.park([email protected]/Native Method)
        - parking to wait for  <0x000000076fc00020> (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.ArrayBlockingQueue.take([email protected]/ArrayBlockingQueue.java:420)
        at jdk.internal.net.http.ResponseSubscribers$HttpResponseInputStream.current([email protected]/ResponseSubscribers.java:458)
        at jdk.internal.net.http.ResponseSubscribers$HttpResponseInputStream.read([email protected]/ResponseSubscribers.java:508)
        at java.io.FilterInputStream.read([email protected]/FilterInputStream.java:119)
        at java.io.FilterInputStream.read([email protected]/FilterInputStream.java:95)
        at org.eclipse.ecf.provider.filetransfer.retrieve.AbstractRetrieveFileTransfer$1.performFileTransfer(AbstractRetrieveFileTransfer.java:180)
        at org.eclipse.ecf.filetransfer.FileTransferJob.run(FileTransferJob.java:76)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)

   Locked ownable synchronizers:
        - None

"Worker-8: Initializing plug-in models" #86 [17688] prio=5 os_prio=0 cpu=30843.75ms elapsed=140.50s tid=0x00000231fe96ef50 nid=17688 in Object.wait()  [0x000000c52f6fe000]
   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.JobManager.join(JobManager.java:1102)
        - locked <0x000000076fc7fa90> (a java.util.Collections$SynchronizedSet)
        at org.eclipse.equinox.internal.p2.artifact.repository.simple.SimpleArtifactRepository.getArtifacts(SimpleArtifactRepository.java:947)
        at org.eclipse.equinox.internal.p2.artifact.repository.CompositeArtifactRepository.getArtifacts(CompositeArtifactRepository.java:341)
        at org.eclipse.equinox.internal.p2.engine.DownloadManager.fetch(DownloadManager.java:140)
        at org.eclipse.equinox.internal.p2.engine.DownloadManager.start(DownloadManager.java:114)
        at org.eclipse.equinox.internal.p2.engine.phases.Collect.completePhase(Collect.java:124)
        at org.eclipse.equinox.internal.p2.engine.Phase.postPerform(Phase.java:254)
        at org.eclipse.equinox.internal.p2.engine.Phase.perform(Phase.java:105)
        at org.eclipse.equinox.internal.p2.engine.PhaseSet.perform(PhaseSet.java:65)
        at org.eclipse.equinox.internal.p2.engine.Engine.perform(Engine.java:95)
        at org.eclipse.equinox.internal.p2.engine.Engine.perform(Engine.java:49)
        at org.eclipse.equinox.internal.provisional.p2.director.PlanExecutionHelper.executePlan(PlanExecutionHelper.java:48)
        at org.eclipse.oomph.p2.internal.core.ProfileTransactionImpl$3.commit(ProfileTransactionImpl.java:574)
        at org.eclipse.oomph.p2.internal.core.ProfileTransactionImpl.commit(ProfileTransactionImpl.java:359)
        at org.eclipse.oomph.targlets.internal.core.TargletContainer.updateProfile(TargletContainer.java:1027)
        at org.eclipse.oomph.targlets.internal.core.TargletContainer.resolveUnits(TargletContainer.java:641)
        at org.eclipse.oomph.targlets.internal.core.TargletContainer.resolveBundles(TargletContainer.java:603)
        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.targetReloaded(PluginModelManager.java:516)
        - locked <0x0000000745bc9850> (a java.lang.Object)
        at org.eclipse.pde.internal.core.RequiredPluginsInitializer.lambda$0(RequiredPluginsInitializer.java:34)
        at org.eclipse.pde.internal.core.RequiredPluginsInitializer$$Lambda/0x00000231b4994a58.run(Unknown Source)
        at org.eclipse.core.runtime.jobs.Job$2.run(Job.java:187)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)

   Locked ownable synchronizers:
        - None

...

"Worker-15: Install download1" #94 [21344] prio=5 os_prio=0 cpu=1093.75ms elapsed=139.04s tid=0x00000231fd3ae3f0 nid=21344 in Object.wait()  [0x000000c52fefe000]
   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.JobManager.join(JobManager.java:1102)
        - locked <0x000000076fd7efb0> (a java.util.Collections$SynchronizedSet)
        at org.eclipse.equinox.internal.p2.transport.ecf.FileReader.readInto(FileReader.java:388)
        at org.eclipse.equinox.internal.p2.transport.ecf.RepositoryTransport.download(RepositoryTransport.java:136)
        at org.eclipse.oomph.p2.internal.core.CachingTransport.download(CachingTransport.java:145)
        at org.eclipse.equinox.internal.p2.repository.Transport.downloadArtifact(Transport.java:151)
        at org.eclipse.equinox.internal.p2.artifact.repository.DefaultArtifactManagerServiceFactory$DefaultArtifactManager.getArtifact(DefaultArtifactManagerServiceFactory.java:53)
        at org.eclipse.equinox.internal.p2.artifact.repository.simple.SimpleArtifactRepository.downloadArtifact(SimpleArtifactRepository.java:727)
        at org.eclipse.equinox.internal.p2.artifact.repository.simple.SimpleArtifactRepository.downloadArtifact(SimpleArtifactRepository.java:648)
        at org.eclipse.equinox.internal.p2.artifact.repository.simple.SimpleArtifactRepository.getArtifact(SimpleArtifactRepository.java:848)
        at org.eclipse.equinox.internal.p2.artifact.repository.MirrorRequest.getArtifact(MirrorRequest.java:357)
        at org.eclipse.equinox.internal.p2.artifact.repository.MirrorRequest.transferSingle(MirrorRequest.java:327)
        at org.eclipse.equinox.internal.p2.artifact.repository.MirrorRequest.transfer(MirrorRequest.java:248)
        at org.eclipse.equinox.internal.p2.artifact.repository.MirrorRequest.perform(MirrorRequest.java:164)
        at org.eclipse.equinox.internal.p2.artifact.repository.simple.SimpleArtifactRepository.getArtifact(SimpleArtifactRepository.java:830)
        at org.eclipse.equinox.internal.p2.artifact.repository.simple.DownloadJob.run(DownloadJob.java:69)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)

   Locked ownable synchronizers:
        - None

"Worker-16: Install download8" #95 [26896] prio=5 os_prio=0 cpu=1312.50ms elapsed=138.79s tid=0x00000231fd3b04c0 nid=26896 in Object.wait()  [0x000000c52fffe000]
   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.JobManager.join(JobManager.java:1102)
        - locked <0x000000076fdfea40> (a java.util.Collections$SynchronizedSet)
        at org.eclipse.equinox.internal.p2.transport.ecf.FileReader.readInto(FileReader.java:388)
        at org.eclipse.equinox.internal.p2.transport.ecf.RepositoryTransport.download(RepositoryTransport.java:136)
        at org.eclipse.oomph.p2.internal.core.CachingTransport.download(CachingTransport.java:145)
        at org.eclipse.equinox.internal.p2.repository.Transport.downloadArtifact(Transport.java:151)
        at org.eclipse.equinox.internal.p2.artifact.repository.DefaultArtifactManagerServiceFactory$DefaultArtifactManager.getArtifact(DefaultArtifactManagerServiceFactory.java:53)
        at org.eclipse.equinox.internal.p2.artifact.repository.simple.SimpleArtifactRepository.downloadArtifact(SimpleArtifactRepository.java:727)
        at org.eclipse.equinox.internal.p2.artifact.repository.simple.SimpleArtifactRepository.downloadArtifact(SimpleArtifactRepository.java:648)
        at org.eclipse.equinox.internal.p2.artifact.repository.simple.SimpleArtifactRepository.getArtifact(SimpleArtifactRepository.java:848)
        at org.eclipse.equinox.internal.p2.artifact.repository.MirrorRequest.getArtifact(MirrorRequest.java:357)
        at org.eclipse.equinox.internal.p2.artifact.repository.MirrorRequest.transferSingle(MirrorRequest.java:327)
        at org.eclipse.equinox.internal.p2.artifact.repository.MirrorRequest.transfer(MirrorRequest.java:248)
        at org.eclipse.equinox.internal.p2.artifact.repository.MirrorRequest.perform(MirrorRequest.java:164)
        at org.eclipse.equinox.internal.p2.artifact.repository.simple.SimpleArtifactRepository.getArtifact(SimpleArtifactRepository.java:830)
        at org.eclipse.equinox.internal.p2.artifact.repository.simple.DownloadJob.run(DownloadJob.java:69)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)

   Locked ownable synchronizers:
        - None

"Worker-19: File Transport Reader" #98 [14092] prio=5 os_prio=0 cpu=1062.50ms elapsed=137.81s tid=0x00000231fd9d9300 nid=14092 waiting on condition  [0x000000c5302fe000]
   java.lang.Thread.State: WAITING (parking)
        at jdk.internal.misc.Unsafe.park([email protected]/Native Method)
        - parking to wait for  <0x000000076feff560> (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.ArrayBlockingQueue.take([email protected]/ArrayBlockingQueue.java:420)
        at jdk.internal.net.http.ResponseSubscribers$HttpResponseInputStream.current([email protected]/ResponseSubscribers.java:458)
        at jdk.internal.net.http.ResponseSubscribers$HttpResponseInputStream.read([email protected]/ResponseSubscribers.java:508)
        at java.io.FilterInputStream.read([email protected]/FilterInputStream.java:119)
        at java.io.FilterInputStream.read([email protected]/FilterInputStream.java:95)
        at org.eclipse.ecf.provider.filetransfer.retrieve.AbstractRetrieveFileTransfer$1.performFileTransfer(AbstractRetrieveFileTransfer.java:180)
        at org.eclipse.ecf.filetransfer.FileTransferJob.run(FileTransferJob.java:76)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)

   Locked ownable synchronizers:
        - None

...

"Worker-23: Update Installed JREs" #102 [9184] prio=5 os_prio=0 cpu=125.00ms elapsed=137.25s tid=0x00000231fd9d3090 nid=9184 waiting for monitor entry  [0x000000c5306fd000]
   java.lang.Thread.State: BLOCKED (on object monitor)
        at org.eclipse.pde.internal.core.PluginModelManager.isInitialized(PluginModelManager.java:493)
        - waiting to lock <0x0000000745bc9850> (a java.lang.Object)
        at org.eclipse.pde.internal.core.RequiredPluginsInitializer.setupClasspath(RequiredPluginsInitializer.java:59)
        at org.eclipse.pde.internal.core.RequiredPluginsInitializer.initialize(RequiredPluginsInitializer.java:51)
        at org.eclipse.jdt.internal.core.JavaModelManager.initializeContainer(JavaModelManager.java:3223)
        at org.eclipse.jdt.internal.core.JavaModelManager$11.run(JavaModelManager.java:3111)
        at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2457)
        at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2482)
        at org.eclipse.jdt.internal.core.JavaModelManager.initializeAllContainers(JavaModelManager.java:3169)
        at org.eclipse.jdt.internal.core.JavaModelManager.getClasspathContainer(JavaModelManager.java:2145)
        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.ExternalFolderChange.updateExternalFoldersIfNecessary(ExternalFolderChange.java:40)
        at org.eclipse.jdt.internal.core.ChangeClasspathOperation.classpathChanged(ChangeClasspathOperation.java:63)
        at org.eclipse.jdt.internal.core.SetContainerOperation.executeOperation(SetContainerOperation.java:118)
        at org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperation.java:751)
        at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2457)
        at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2482)
        at org.eclipse.jdt.internal.core.JavaModelOperation.runOperation(JavaModelOperation.java:821)
        at org.eclipse.jdt.core.JavaCore.setClasspathContainer(JavaCore.java:6237)
        at org.eclipse.jdt.internal.launching.JREContainerInitializer.initialize(JREContainerInitializer.java:114)
        at org.eclipse.jdt.internal.launching.LaunchingPlugin$VMChanges.rebind(LaunchingPlugin.java:379)
        at org.eclipse.jdt.internal.launching.LaunchingPlugin$VMChanges$1.run(LaunchingPlugin.java:299)
        at org.eclipse.jdt.internal.core.BatchOperation.executeOperation(BatchOperation.java:41)
        at org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperation.java:751)
        at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2457)
        at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2482)
        at org.eclipse.jdt.core.JavaCore.run(JavaCore.java:6106)
        at org.eclipse.jdt.internal.launching.LaunchingPlugin$VMChanges.doit(LaunchingPlugin.java:303)
        at org.eclipse.jdt.internal.launching.LaunchingPlugin$JREUpdateJob.run(LaunchingPlugin.java:400)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)

   Locked ownable synchronizers:
        - None

...

"Worker-26: Updating workspace" #109 [25676] prio=5 os_prio=0 cpu=281.25ms elapsed=134.62s tid=0x00000231fd3aa8e0 nid=25676 waiting for monitor entry  [0x000000c530ffe000]
   java.lang.Thread.State: BLOCKED (on object monitor)
        at org.eclipse.pde.internal.core.PluginModelManager.isInitialized(PluginModelManager.java:493)
        - waiting to lock <0x0000000745bc9850> (a java.lang.Object)
        at org.eclipse.pde.internal.core.RequiredPluginsInitializer.setupClasspath(RequiredPluginsInitializer.java:59)
        at org.eclipse.pde.internal.core.RequiredPluginsInitializer.initialize(RequiredPluginsInitializer.java:51)
        at org.eclipse.jdt.internal.core.JavaModelManager.initializeContainer(JavaModelManager.java:3223)
        at org.eclipse.jdt.internal.core.JavaModelManager$11.run(JavaModelManager.java:3111)
        at org.eclipse.jdt.internal.core.JavaModelManager.initializeAllContainers(JavaModelManager.java:3167)
        at org.eclipse.jdt.internal.core.JavaModelManager.getClasspathContainer(JavaModelManager.java:2145)
        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.ClasspathChange.generateDelta(ClasspathChange.java:245)
        at org.eclipse.jdt.internal.core.DeltaProcessor.resourceChanged(DeltaProcessor.java:2117)
        at org.eclipse.jdt.internal.core.DeltaProcessingState.resourceChanged(DeltaProcessingState.java:490)
        at org.eclipse.core.internal.events.NotificationManager$1.run(NotificationManager.java:321)
        at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:47)
        at org.eclipse.core.internal.events.NotificationManager.notify(NotificationManager.java:311)
        at org.eclipse.core.internal.events.NotificationManager.broadcastChanges(NotificationManager.java:174)
        at org.eclipse.core.internal.resources.Workspace.broadcastPostChange(Workspace.java:465)
        at org.eclipse.core.internal.resources.Workspace.endOperation(Workspace.java:1593)
        at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2471)
        at org.eclipse.core.internal.events.NotificationManager$NotifyJob.run(NotificationManager.java:60)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)

   Locked ownable synchronizers:
        - None

...

"Worker-28: Install download6" #111 [26868] prio=5 os_prio=0 cpu=859.38ms elapsed=134.60s tid=0x00000231fd3af7a0 nid=26868 in Object.wait()  [0x000000c5311fe000]
   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.JobManager.join(JobManager.java:1102)
        - locked <0x000000076fe011d0> (a java.util.Collections$SynchronizedSet)
        at org.eclipse.equinox.internal.p2.transport.ecf.FileReader.readInto(FileReader.java:388)
        at org.eclipse.equinox.internal.p2.transport.ecf.RepositoryTransport.download(RepositoryTransport.java:136)
        at org.eclipse.oomph.p2.internal.core.CachingTransport.download(CachingTransport.java:145)
        at org.eclipse.equinox.internal.p2.repository.Transport.downloadArtifact(Transport.java:151)
        at org.eclipse.equinox.internal.p2.artifact.repository.DefaultArtifactManagerServiceFactory$DefaultArtifactManager.getArtifact(DefaultArtifactManagerServiceFactory.java:53)
        at org.eclipse.equinox.internal.p2.artifact.repository.simple.SimpleArtifactRepository.downloadArtifact(SimpleArtifactRepository.java:727)
        at org.eclipse.equinox.internal.p2.artifact.repository.simple.SimpleArtifactRepository.downloadArtifact(SimpleArtifactRepository.java:648)
        at org.eclipse.equinox.internal.p2.artifact.repository.simple.SimpleArtifactRepository.getArtifact(SimpleArtifactRepository.java:848)
        at org.eclipse.equinox.internal.p2.artifact.repository.MirrorRequest.getArtifact(MirrorRequest.java:357)
        at org.eclipse.equinox.internal.p2.artifact.repository.MirrorRequest.transferSingle(MirrorRequest.java:327)
        at org.eclipse.equinox.internal.p2.artifact.repository.MirrorRequest.transfer(MirrorRequest.java:248)
        at org.eclipse.equinox.internal.p2.artifact.repository.MirrorRequest.perform(MirrorRequest.java:164)
        at org.eclipse.equinox.internal.p2.artifact.repository.simple.SimpleArtifactRepository.getArtifact(SimpleArtifactRepository.java:830)
        at org.eclipse.equinox.internal.p2.artifact.repository.simple.DownloadJob.run(DownloadJob.java:69)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)

   Locked ownable synchronizers:
        - None


"Worker-30: Install download5" #113 [31804] prio=5 os_prio=0 cpu=968.75ms elapsed=134.59s tid=0x00000231fd3aea80 nid=31804 in Object.wait()  [0x000000c5313fe000]
   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.JobManager.join(JobManager.java:1102)
        - locked <0x000000076fc84450> (a java.util.Collections$SynchronizedSet)
        at org.eclipse.equinox.internal.p2.transport.ecf.FileReader.readInto(FileReader.java:388)
        at org.eclipse.equinox.internal.p2.transport.ecf.RepositoryTransport.download(RepositoryTransport.java:136)
        at org.eclipse.oomph.p2.internal.core.CachingTransport.download(CachingTransport.java:145)
        at org.eclipse.equinox.internal.p2.repository.Transport.downloadArtifact(Transport.java:151)
        at org.eclipse.equinox.internal.p2.artifact.repository.DefaultArtifactManagerServiceFactory$DefaultArtifactManager.getArtifact(DefaultArtifactManagerServiceFactory.java:53)
        at org.eclipse.equinox.internal.p2.artifact.repository.simple.SimpleArtifactRepository.downloadArtifact(SimpleArtifactRepository.java:727)
        at org.eclipse.equinox.internal.p2.artifact.repository.simple.SimpleArtifactRepository.downloadArtifact(SimpleArtifactRepository.java:648)
        at org.eclipse.equinox.internal.p2.artifact.repository.simple.SimpleArtifactRepository.getArtifact(SimpleArtifactRepository.java:848)
        at org.eclipse.equinox.internal.p2.artifact.repository.MirrorRequest.getArtifact(MirrorRequest.java:357)
        at org.eclipse.equinox.internal.p2.artifact.repository.MirrorRequest.transferSingle(MirrorRequest.java:327)
        at org.eclipse.equinox.internal.p2.artifact.repository.MirrorRequest.transfer(MirrorRequest.java:248)
        at org.eclipse.equinox.internal.p2.artifact.repository.MirrorRequest.perform(MirrorRequest.java:164)
        at org.eclipse.equinox.internal.p2.artifact.repository.simple.SimpleArtifactRepository.getArtifact(SimpleArtifactRepository.java:830)
        at org.eclipse.equinox.internal.p2.artifact.repository.simple.DownloadJob.run(DownloadJob.java:69)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)

   Locked ownable synchronizers:
        - None


"Worker-32: File Transport Reader" #115 [20112] prio=5 os_prio=0 cpu=171.88ms elapsed=134.59s tid=0x00000231fd3ab600 nid=20112 waiting on condition  [0x000000c5315fe000]
   java.lang.Thread.State: WAITING (parking)
        at jdk.internal.misc.Unsafe.park([email protected]/Native Method)
        - parking to wait for  <0x000000076fe01618> (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.ArrayBlockingQueue.take([email protected]/ArrayBlockingQueue.java:420)
        at jdk.internal.net.http.ResponseSubscribers$HttpResponseInputStream.current([email protected]/ResponseSubscribers.java:458)
        at jdk.internal.net.http.ResponseSubscribers$HttpResponseInputStream.read([email protected]/ResponseSubscribers.java:508)
        at java.io.FilterInputStream.read([email protected]/FilterInputStream.java:119)
        at java.io.FilterInputStream.read([email protected]/FilterInputStream.java:95)
        at org.eclipse.ecf.provider.filetransfer.retrieve.AbstractRetrieveFileTransfer$1.performFileTransfer(AbstractRetrieveFileTransfer.java:180)
        at org.eclipse.ecf.filetransfer.FileTransferJob.run(FileTransferJob.java:76)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)

   Locked ownable synchronizers:
        - None


"Worker-40: Install download3" #123 [2220] prio=5 os_prio=0 cpu=531.25ms elapsed=134.55s tid=0x00000231fc6be870 nid=2220 in Object.wait()  [0x000000c531dfe000]
   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.JobManager.join(JobManager.java:1102)
        - locked <0x000000076ff7f418> (a java.util.Collections$SynchronizedSet)
        at org.eclipse.equinox.internal.p2.transport.ecf.FileReader.readInto(FileReader.java:388)
        at org.eclipse.equinox.internal.p2.transport.ecf.RepositoryTransport.download(RepositoryTransport.java:136)
        at org.eclipse.oomph.p2.internal.core.CachingTransport.download(CachingTransport.java:145)
        at org.eclipse.equinox.internal.p2.repository.Transport.downloadArtifact(Transport.java:151)
        at org.eclipse.equinox.internal.p2.artifact.repository.DefaultArtifactManagerServiceFactory$DefaultArtifactManager.getArtifact(DefaultArtifactManagerServiceFactory.java:53)
        at org.eclipse.equinox.internal.p2.artifact.repository.simple.SimpleArtifactRepository.downloadArtifact(SimpleArtifactRepository.java:727)
        at org.eclipse.equinox.internal.p2.artifact.repository.simple.SimpleArtifactRepository.downloadArtifact(SimpleArtifactRepository.java:648)
        at org.eclipse.equinox.internal.p2.artifact.repository.simple.SimpleArtifactRepository.getArtifact(SimpleArtifactRepository.java:848)
        at org.eclipse.equinox.internal.p2.artifact.repository.MirrorRequest.getArtifact(MirrorRequest.java:357)
        at org.eclipse.equinox.internal.p2.artifact.repository.MirrorRequest.transferSingle(MirrorRequest.java:327)
        at org.eclipse.equinox.internal.p2.artifact.repository.MirrorRequest.transfer(MirrorRequest.java:248)
        at org.eclipse.equinox.internal.p2.artifact.repository.MirrorRequest.perform(MirrorRequest.java:164)
        at org.eclipse.equinox.internal.p2.artifact.repository.simple.SimpleArtifactRepository.getArtifact(SimpleArtifactRepository.java:830)
        at org.eclipse.equinox.internal.p2.artifact.repository.simple.DownloadJob.run(DownloadJob.java:69)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)

   Locked ownable synchronizers:
        - None

"Worker-44: Update Installed JREs" #127 [27188] prio=5 os_prio=0 cpu=31.25ms elapsed=134.46s tid=0x00000231fe96c160 nid=27188 waiting for monitor entry  [0x000000c5321fd000]
   java.lang.Thread.State: BLOCKED (on object monitor)
        at org.eclipse.pde.internal.core.PluginModelManager.isInitialized(PluginModelManager.java:493)
        - waiting to lock <0x0000000745bc9850> (a java.lang.Object)
        at org.eclipse.pde.internal.core.RequiredPluginsInitializer.setupClasspath(RequiredPluginsInitializer.java:59)
        at org.eclipse.pde.internal.core.RequiredPluginsInitializer.initialize(RequiredPluginsInitializer.java:51)
        at org.eclipse.jdt.internal.core.JavaModelManager.initializeContainer(JavaModelManager.java:3223)
        at org.eclipse.jdt.internal.core.JavaModelManager$11.run(JavaModelManager.java:3111)
        at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2457)
        at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2482)
        at org.eclipse.jdt.internal.core.JavaModelManager.initializeAllContainers(JavaModelManager.java:3169)
        at org.eclipse.jdt.internal.core.JavaModelManager.getClasspathContainer(JavaModelManager.java:2145)
        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.ExternalFolderChange.updateExternalFoldersIfNecessary(ExternalFolderChange.java:40)
        at org.eclipse.jdt.internal.core.ChangeClasspathOperation.classpathChanged(ChangeClasspathOperation.java:63)
        at org.eclipse.jdt.internal.core.SetContainerOperation.executeOperation(SetContainerOperation.java:118)
        at org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperation.java:751)
        at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2457)
        at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2482)
        at org.eclipse.jdt.internal.core.JavaModelOperation.runOperation(JavaModelOperation.java:821)
        at org.eclipse.jdt.core.JavaCore.setClasspathContainer(JavaCore.java:6237)
        at org.eclipse.jdt.internal.launching.JREContainerInitializer.initialize(JREContainerInitializer.java:114)
        at org.eclipse.jdt.internal.launching.LaunchingPlugin$VMChanges.rebind(LaunchingPlugin.java:379)
        at org.eclipse.jdt.internal.launching.LaunchingPlugin$VMChanges$1.run(LaunchingPlugin.java:299)
        at org.eclipse.jdt.internal.core.BatchOperation.executeOperation(BatchOperation.java:41)
        at org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperation.java:751)
        at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2457)
        at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2482)
        at org.eclipse.jdt.core.JavaCore.run(JavaCore.java:6106)
        at org.eclipse.jdt.internal.launching.LaunchingPlugin$VMChanges.doit(LaunchingPlugin.java:303)
        at org.eclipse.jdt.internal.launching.LaunchingPlugin$JREUpdateJob.run(LaunchingPlugin.java:400)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)

   Locked ownable synchronizers:
        - None

Image

@jukzi jukzi added performance Performance issues regression Regression defect labels Jan 16, 2025
@laeubi
Copy link
Contributor

laeubi commented Jan 16, 2025

probably regression from #1552

It is highly unlikely that the job manager is suspended at that time.

threaddump shows a lot of tasks that should happen in the background only:

This is a known problem already, but it shows a busy cursor, so I'm not sure the UI is really frozen...

@jukzi
Copy link
Contributor Author

jukzi commented Jan 16, 2025

I'm not sure the UI is really frozen...

see screenshot:
Image

@laeubi
Copy link
Contributor

laeubi commented Jan 16, 2025

Then

at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:67)
at org.eclipse.debug.ui.DebugUITools.openLaunchConfigurationDialogOnGroup(DebugUITools.java:63

seem to use the busy indicator incorrectly (what would of course not help in you need to wait 2min).

@merks
Copy link
Contributor

merks commented Jan 16, 2025

It's clear that the target platform is currently being reloaded org.eclipse.pde.internal.core.PluginModelManager.targetReloaded(PluginModelManager.java:516):

Image

So the target platform is reloading for whatever reason and that can take arbitrarily long depending on the network, what's in the pools, and so on. Until it's finished, there's really not so much you can do. The classpaths are not determined and set up properly, the overall state of the workspace bundles and target bundles is in flux.

So while things are in this state of flux, something tries to get exactly the state that's being built in the background and does that on the main thread. The dialog has always done that, so no change of behavior here. Agreed that could be handled more gracefully, but no matter what, it/you will need to wait for everything to finish regardless of how graceful that waiting behavior might be presented to you. (It does properly show a busy indicator.)

Looking deeper at the guards:

Image

either there is no profile, the resolution is being forced, or the definition has changed and we've not already detected an error yet. If the guards prevented re-resolution, the process would complete extremely quickly from cached information.

When I set a breakpoint there, it gets here and the digests are equal:

Image

If I leave that breakpoint stopped, then in the IDE I can try to look at launch configurations. Not surprisingly I am stuck here:

Image

And indeed, it must wait for object 103, i.e., for resolution to complete:

Image

These locks have always been like this and they are necessary. As such, I see nothing to indicate a regression.

The recurring problem is that your target platform needs resolving. And now, even with Oomph using a cached resolved state except when force == true or the definition has change, and even with the resolve is not happening while the job manager is suspended, you definitely still need to resolve and it is being properly done on a background thread. That all seems the opposite of a regression. The fundamental point is that the need to resolve cannot be avoided. You will need to be patient. I think the title of this issue is more properly:

UI Freeze on open LaunchConfigurations dialog while the target platform is being resolved.

I do not personally have the resource to make the presentation of this delay prettier or more helpful than the current busy indicator.

I wonder, if you gracefully shut down this IDE and restart it, does the same problem recur? I would definitely not expect that. If I restart my normal SDK IDE, and immediately open the launch configurations, I see no such problem.

@jukzi
Copy link
Contributor Author

jukzi commented Jan 16, 2025

It did not reoccur (yet). I rate it regression because it never happened before when opening launch configuration dialog. Until now it used to be a slow start of eclipse IDE but now IDE looked like it started fast and ready for user input bot froze on first user input.
At most i was surprised that it felt like it did start that initializing task only when i started the Dialog, while it had pretty time to initialize before. But thats only a feeling that i will observe more carefully.

At least it did not dead lock (hang forever) anymore :-)

@merks
Copy link
Contributor

merks commented Jan 16, 2025

From my side I see only improvements. The IDE does not block indefinitely waiting for jobs that cannot start, the IDE does not load a target platform on the main thread so startup is quick. In addition, the work that should be done on a background thread is being done on a background thread. And finally, something that will not be obvious but is also at play is that the targlet container caches the locations of the bundles and features from the composed target and generally reuses those, so on a typical startup there will be no internet access to p2 update sites, i.e., improved background performance. Nevertheless this issue labels performance and regression, both of which I assert are speculative at best; you might imagine that people who spent significant time improving the behavior and the performance will not look so favorably upon such speculation. Alas, such is how it is...

@merks merks changed the title UI freeze on open LaunchConfigurationsDialog first time UI Freeze on open LaunchConfigurations dialog while the target platform is being resolved Jan 17, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
performance Performance issues regression Regression defect
Projects
None yet
Development

No branches or pull requests

3 participants