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

Deadlock between "SCR Component Actor" and "main" thread #15

Closed
HannesWell opened this issue May 27, 2022 · 31 comments · Fixed by #68
Closed

Deadlock between "SCR Component Actor" and "main" thread #15

HannesWell opened this issue May 27, 2022 · 31 comments · Fixed by #68

Comments

@HannesWell
Copy link
Member

After updating one of my Eclipse installations (Eclipse Modlling-tools provided by Oomph plus some more plugins) on Linux, it seemed not to start anymore (no UI showed up, not even the icon becomes visible in the task-bar). Attempting to start it a second time did not work because the workspace is blocked. Nevertheless the System Monitor showed that the eclipse process is running and VisualVM detected the following deadlock:

2022-05-27 10:21:37
Full thread dump OpenJDK 64-Bit Server VM (11.0.15+10-post-Debian-1deb10u1 mixed mode, sharing):

Threads class SMR info:
_java_thread_list=0x00007fad1c1ddc20, length=25, elements={
0x00007fad78019800, 0x00007fad78216800, 0x00007fad78218800, 0x00007fad7821e000,
0x00007fad78220000, 0x00007fad78222800, 0x00007fad78224800, 0x00007fad78226800,
0x00007fad78244800, 0x00007fad787a0800, 0x00007fad787f7000, 0x00007fad78802800,
0x00007faca0031800, 0x00007faca022c000, 0x00007faca049e000, 0x00007faca050c800,
0x00007faca06ac800, 0x00007fad788b7000, 0x00007fad78f7f000, 0x00007fad28001000,
0x00007fac782ac000, 0x00007facc4020800, 0x00007faccc260000, 0x00007faccc067000,
0x00007facc4021800
}

"main" eclipse-equinox/equinox.framework#1 prio=6 os_prio=0 cpu=1071,22ms elapsed=62,52s tid=0x00007fad78019800 nid=0x97c waiting for monitor entry  [0x00007fad7d001000]
   java.lang.Thread.State: BLOCKED (on object monitor)
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.getService(ServiceRegistrationImpl.java:541)
        - waiting to lock <0x0000000092005488> (a org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse)
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.getService(ServiceRegistry.java:534)
        at org.eclipse.osgi.internal.framework.BundleContextImpl.getService(BundleContextImpl.java:660)
        at org.apache.felix.scr.impl.manager.SingleRefPair.getServiceObject(SingleRefPair.java:88)
        at org.apache.felix.scr.impl.inject.field.FieldHandler$ReferenceMethodImpl.getServiceObject(FieldHandler.java:525)
        at org.apache.felix.scr.impl.manager.DependencyManager.getServiceObject(DependencyManager.java:2545)
        at org.apache.felix.scr.impl.manager.DependencyManager$SingleStaticCustomizer.prebind(DependencyManager.java:1392)
        at org.apache.felix.scr.impl.manager.DependencyManager.prebind(DependencyManager.java:1822)
        at org.apache.felix.scr.impl.manager.AbstractComponentManager.collectDependencies(AbstractComponentManager.java:1057)
        at org.apache.felix.scr.impl.manager.SingleComponentManager.getServiceInternal(SingleComponentManager.java:953)
        at org.apache.felix.scr.impl.manager.SingleComponentManager.getService(SingleComponentManager.java:918)
        at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse$1.run(ServiceFactoryUse.java:220)
        at java.security.AccessController.doPrivileged(java.base@11.0.15/Native Method)
        at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.factoryGetService(ServiceFactoryUse.java:217)
        at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.getService(ServiceFactoryUse.java:118)
        at org.eclipse.osgi.internal.serviceregistry.ServiceConsumer$2.getService(ServiceConsumer.java:48)
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.getService(ServiceRegistrationImpl.java:547)
        - locked <0x000000009202cea8> (a org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse)
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.getService(ServiceRegistry.java:534)
        at org.eclipse.osgi.internal.framework.BundleContextImpl.getService(BundleContextImpl.java:660)
        at org.apache.felix.scr.impl.manager.SingleRefPair.getServiceObject(SingleRefPair.java:88)
        at org.apache.felix.scr.impl.inject.field.FieldHandler$ReferenceMethodImpl.getServiceObject(FieldHandler.java:525)
        at org.apache.felix.scr.impl.manager.DependencyManager.getServiceObject(DependencyManager.java:2545)
        at org.apache.felix.scr.impl.manager.DependencyManager$SingleStaticCustomizer.prebind(DependencyManager.java:1392)
        at org.apache.felix.scr.impl.manager.DependencyManager.prebind(DependencyManager.java:1822)
        at org.apache.felix.scr.impl.manager.AbstractComponentManager.collectDependencies(AbstractComponentManager.java:1057)
        at org.apache.felix.scr.impl.manager.SingleComponentManager.getServiceInternal(SingleComponentManager.java:953)
        at org.apache.felix.scr.impl.manager.SingleComponentManager.getService(SingleComponentManager.java:918)
        at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse$1.run(ServiceFactoryUse.java:220)
        at java.security.AccessController.doPrivileged(java.base@11.0.15/Native Method)
        at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.factoryGetService(ServiceFactoryUse.java:217)
        at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.getService(ServiceFactoryUse.java:118)
        at org.eclipse.osgi.internal.serviceregistry.ServiceConsumer$2.getService(ServiceConsumer.java:48)
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.getService(ServiceRegistrationImpl.java:547)
        - locked <0x000000009260e008> (a org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse)
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.getService(ServiceRegistry.java:534)
        at org.eclipse.osgi.internal.framework.BundleContextImpl.getService(BundleContextImpl.java:660)
        at org.apache.felix.scr.impl.manager.SingleRefPair.getServiceObject(SingleRefPair.java:88)
        at org.apache.felix.scr.impl.inject.methods.BindMethod.getServiceObject(BindMethod.java:675)
        at org.apache.felix.scr.impl.manager.DependencyManager.getServiceObject(DependencyManager.java:2545)
        at org.apache.felix.scr.impl.manager.DependencyManager$MultipleDynamicCustomizer.prebind(DependencyManager.java:431)
        at org.apache.felix.scr.impl.manager.DependencyManager.prebind(DependencyManager.java:1822)
        at org.apache.felix.scr.impl.manager.AbstractComponentManager.collectDependencies(AbstractComponentManager.java:1057)
        at org.apache.felix.scr.impl.manager.SingleComponentManager.getServiceInternal(SingleComponentManager.java:953)
        at org.apache.felix.scr.impl.manager.SingleComponentManager.getService(SingleComponentManager.java:918)
        at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse$1.run(ServiceFactoryUse.java:220)
        at java.security.AccessController.doPrivileged(java.base@11.0.15/Native Method)
        at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.factoryGetService(ServiceFactoryUse.java:217)
        at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.getService(ServiceFactoryUse.java:118)
        at org.eclipse.osgi.internal.serviceregistry.ServiceConsumer$2.getService(ServiceConsumer.java:48)
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.getService(ServiceRegistrationImpl.java:547)
        - locked <0x000000009278e348> (a org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse)
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.getService(ServiceRegistry.java:534)
        at org.eclipse.osgi.internal.framework.BundleContextImpl.getService(BundleContextImpl.java:660)
        at org.apache.felix.scr.impl.manager.SingleRefPair.getServiceObject(SingleRefPair.java:88)
        at org.apache.felix.scr.impl.inject.field.FieldHandler$ReferenceMethodImpl.getServiceObject(FieldHandler.java:525)
        at org.apache.felix.scr.impl.manager.DependencyManager.getServiceObject(DependencyManager.java:2545)
        at org.apache.felix.scr.impl.manager.DependencyManager$SingleStaticCustomizer.prebind(DependencyManager.java:1392)
        at org.apache.felix.scr.impl.manager.DependencyManager.prebind(DependencyManager.java:1822)
        at org.apache.felix.scr.impl.manager.AbstractComponentManager.collectDependencies(AbstractComponentManager.java:1057)
        at org.apache.felix.scr.impl.manager.SingleComponentManager.getServiceInternal(SingleComponentManager.java:953)
        at org.apache.felix.scr.impl.manager.SingleComponentManager.getService(SingleComponentManager.java:918)
        at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse$1.run(ServiceFactoryUse.java:220)
        at java.security.AccessController.doPrivileged(java.base@11.0.15/Native Method)
        at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.factoryGetService(ServiceFactoryUse.java:217)
        at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.getService(ServiceFactoryUse.java:118)
        at org.eclipse.osgi.internal.serviceregistry.ServiceConsumer$2.getService(ServiceConsumer.java:48)
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.getService(ServiceRegistrationImpl.java:547)
        - locked <0x0000000092937230> (a org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse)
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.getService(ServiceRegistry.java:534)
        at org.eclipse.osgi.internal.framework.BundleContextImpl.getService(BundleContextImpl.java:660)
        at org.apache.felix.scr.impl.manager.SingleRefPair.getServiceObject(SingleRefPair.java:88)
        at org.apache.felix.scr.impl.inject.methods.BindMethod.getServiceObject(BindMethod.java:675)
        at org.apache.felix.scr.impl.manager.DependencyManager.getServiceObject(DependencyManager.java:2545)
        at org.apache.felix.scr.impl.manager.DependencyManager$MultipleDynamicCustomizer.prebind(DependencyManager.java:431)
        at org.apache.felix.scr.impl.manager.DependencyManager.prebind(DependencyManager.java:1822)
        at org.apache.felix.scr.impl.manager.AbstractComponentManager.collectDependencies(AbstractComponentManager.java:1057)
        at org.apache.felix.scr.impl.manager.SingleComponentManager.getServiceInternal(SingleComponentManager.java:953)
        at org.apache.felix.scr.impl.manager.AbstractComponentManager.activateInternal(AbstractComponentManager.java:785)
        at org.apache.felix.scr.impl.manager.DependencyManager$SingleStaticCustomizer.addedService(DependencyManager.java:1271)
        at org.apache.felix.scr.impl.manager.DependencyManager$SingleStaticCustomizer.addedService(DependencyManager.java:1222)
        at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.customizerAdded(ServiceTracker.java:1200)
        at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.customizerAdded(ServiceTracker.java:1121)
        at org.apache.felix.scr.impl.manager.ServiceTracker$AbstractTracked.trackAdding(ServiceTracker.java:928)
        at org.apache.felix.scr.impl.manager.ServiceTracker$AbstractTracked.track(ServiceTracker.java:864)
        at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.serviceChanged(ServiceTracker.java:1152)
        at org.apache.felix.scr.impl.BundleComponentActivator$ListenerInfo.serviceChanged(BundleComponentActivator.java:114)
        at org.eclipse.osgi.internal.serviceregistry.FilteredServiceListener.serviceChanged(FilteredServiceListener.java:123)
        at org.eclipse.osgi.internal.framework.BundleContextImpl.dispatchEvent(BundleContextImpl.java:961)
        at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:234)
        at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:151)
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEventPrivileged(ServiceRegistry.java:937)
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEvent(ServiceRegistry.java:874)
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.register(ServiceRegistrationImpl.java:141)
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.registerService(ServiceRegistry.java:262)
        at org.eclipse.osgi.internal.framework.BundleContextImpl.registerService(BundleContextImpl.java:500)
        at org.eclipse.osgi.internal.framework.BundleContextImpl.registerService(BundleContextImpl.java:519)
        at org.eclipse.osgi.internal.framework.BundleContextImpl.registerService(BundleContextImpl.java:1047)
        at org.eclipse.core.resources.ResourcesPlugin$WorkspaceInitCustomizer.addingService(ResourcesPlugin.java:528)
        at org.eclipse.core.resources.ResourcesPlugin$WorkspaceInitCustomizer.addingService(ResourcesPlugin.java:1)
        at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:943)
        at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:1)
        at org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256)
        at org.osgi.util.tracker.AbstractTracked.trackInitial(AbstractTracked.java:183)
        at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:321)
        at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:264)
        at org.eclipse.core.resources.ResourcesPlugin.start(ResourcesPlugin.java:499)
        at org.eclipse.osgi.internal.framework.BundleContextImpl$2.run(BundleContextImpl.java:818)
        at org.eclipse.osgi.internal.framework.BundleContextImpl$2.run(BundleContextImpl.java:1)
        at java.security.AccessController.doPrivileged(java.base@11.0.15/Native Method)
        at org.eclipse.osgi.internal.framework.BundleContextImpl.startActivator(BundleContextImpl.java:810)
        at org.eclipse.osgi.internal.framework.BundleContextImpl.start(BundleContextImpl.java:767)
        at org.eclipse.osgi.internal.framework.EquinoxBundle.startWorker0(EquinoxBundle.java:1032)
        at org.eclipse.osgi.internal.framework.EquinoxBundle$EquinoxModule.startWorker(EquinoxBundle.java:371)
        at org.eclipse.osgi.container.Module.doStart(Module.java:605)
        at org.eclipse.osgi.container.Module.start(Module.java:468)
        at org.eclipse.osgi.framework.util.SecureAction.start(SecureAction.java:513)
        at org.eclipse.osgi.internal.hooks.EclipseLazyStarter.postFindLocalClass(EclipseLazyStarter.java:117)
        at org.eclipse.osgi.internal.loader.classpath.ClasspathManager.findLocalClass(ClasspathManager.java:570)
        at org.eclipse.osgi.internal.loader.ModuleClassLoader.findLocalClass(ModuleClassLoader.java:335)
        at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:397)
        at org.eclipse.osgi.internal.loader.sources.SingleSourcePackage.loadClass(SingleSourcePackage.java:41)
        at org.eclipse.osgi.internal.loader.BundleLoader.findClass0(BundleLoader.java:496)
        at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:416)
        at org.eclipse.osgi.internal.loader.ModuleClassLoader.loadClass(ModuleClassLoader.java:168)
        at java.lang.ClassLoader.loadClass(java.base@11.0.15/ClassLoader.java:522)
        at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:153)
        at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203)
        at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:136)
        at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
        at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:402)
        at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255)
        at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(java.base@11.0.15/Native Method)
        at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(java.base@11.0.15/NativeMethodAccessorImpl.java:62)
        at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(java.base@11.0.15/DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(java.base@11.0.15/Method.java:566)
        at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:659)
        at org.eclipse.equinox.launcher.Main.basicRun(Main.java:596)
        at org.eclipse.equinox.launcher.Main.run(Main.java:1467)
        at org.eclipse.equinox.launcher.Main.main(Main.java:1440)

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

"Reference Handler" eclipse-equinox/equinox.framework#2 daemon prio=10 os_prio=0 cpu=0,68ms elapsed=62,51s tid=0x00007fad78216800 nid=0x984 waiting on condition  [0x00007fad5450b000]
   java.lang.Thread.State: RUNNABLE
        at java.lang.ref.Reference.waitForReferencePendingList(java.base@11.0.15/Native Method)
        at java.lang.ref.Reference.processPendingReferences(java.base@11.0.15/Reference.java:241)
        at java.lang.ref.Reference$ReferenceHandler.run(java.base@11.0.15/Reference.java:213)

   Locked ownable synchronizers:
        - None

"Finalizer" eclipse-equinox/equinox.framework#3 daemon prio=8 os_prio=0 cpu=0,13ms elapsed=62,51s tid=0x00007fad78218800 nid=0x985 in Object.wait()  [0x00007fad5440a000]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(java.base@11.0.15/Native Method)
        - waiting on <0x00000000803e4af8> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(java.base@11.0.15/ReferenceQueue.java:155)
        - waiting to re-lock in wait() <0x00000000803e4af8> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(java.base@11.0.15/ReferenceQueue.java:176)
        at java.lang.ref.Finalizer$FinalizerThread.run(java.base@11.0.15/Finalizer.java:170)

   Locked ownable synchronizers:
        - None

"Signal Dispatcher" eclipse-equinox/equinox.framework#4 daemon prio=9 os_prio=0 cpu=0,17ms elapsed=62,51s tid=0x00007fad7821e000 nid=0x986 runnable  [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
        - None

"Service Thread" eclipse-equinox/equinox.framework#5 daemon prio=9 os_prio=0 cpu=0,02ms elapsed=62,51s tid=0x00007fad78220000 nid=0x987 runnable  [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
        - None

"C2 CompilerThread0" eclipse-equinox/equinox.framework#6 daemon prio=9 os_prio=0 cpu=1245,66ms elapsed=62,51s tid=0x00007fad78222800 nid=0x988 waiting on condition  [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE
   No compile task

   Locked ownable synchronizers:
        - None

"C1 CompilerThread0" eclipse-equinox/equinox.framework#14 daemon prio=9 os_prio=0 cpu=592,96ms elapsed=62,51s tid=0x00007fad78224800 nid=0x989 waiting on condition  [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE
   No compile task

   Locked ownable synchronizers:
        - None

"Sweeper thread" eclipse-equinox/equinox.framework#18 daemon prio=9 os_prio=0 cpu=3,95ms elapsed=62,51s tid=0x00007fad78226800 nid=0x98a runnable  [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
        - None

"Common-Cleaner" eclipse-equinox/equinox.framework#19 daemon prio=8 os_prio=0 cpu=0,70ms elapsed=62,50s tid=0x00007fad78244800 nid=0x98c in Object.wait()  [0x00007fad3f1c3000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
        at java.lang.Object.wait(java.base@11.0.15/Native Method)
        - waiting on <0x00000000803c7d18> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(java.base@11.0.15/ReferenceQueue.java:155)
        - waiting to re-lock in wait() <0x00000000803c7d18> (a java.lang.ref.ReferenceQueue$Lock)
        at jdk.internal.ref.CleanerImpl.run(java.base@11.0.15/CleanerImpl.java:148)
        at java.lang.Thread.run(java.base@11.0.15/Thread.java:829)
        at jdk.internal.misc.InnocuousThread.run(java.base@11.0.15/InnocuousThread.java:161)

   Locked ownable synchronizers:
        - None

"Active Thread: Equinox Container: e1a46c0f-ebe2-43b3-a869-f52e91c4dd8d" eclipse-equinox/equinox.framework#21 prio=5 os_prio=0 cpu=0,80ms elapsed=62,01s tid=0x00007fad787a0800 nid=0x99f waiting on condition  [0x00007fad06169000]
   java.lang.Thread.State: TIMED_WAITING (parking)
        at jdk.internal.misc.Unsafe.park(java.base@11.0.15/Native Method)
        - parking to wait for  <0x0000000080be9570> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
        at java.util.concurrent.locks.LockSupport.parkNanos(java.base@11.0.15/LockSupport.java:234)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(java.base@11.0.15/AbstractQueuedSynchronizer.java:2123)
        at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@11.0.15/ScheduledThreadPoolExecutor.java:1182)
        at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@11.0.15/ScheduledThreadPoolExecutor.java:899)
        at java.util.concurrent.ThreadPoolExecutor.getTask(java.base@11.0.15/ThreadPoolExecutor.java:1054)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@11.0.15/ThreadPoolExecutor.java:1114)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@11.0.15/ThreadPoolExecutor.java:628)
        at java.lang.Thread.run(java.base@11.0.15/Thread.java:829)

   Locked ownable synchronizers:
        - None

"Framework Event Dispatcher: Equinox Container: e1a46c0f-ebe2-43b3-a869-f52e91c4dd8d" eclipse-equinox/equinox.framework#23 daemon prio=5 os_prio=0 cpu=23,68ms elapsed=61,89s tid=0x00007fad787f7000 nid=0x9a6 in Object.wait()  [0x00007fad056ae000]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(java.base@11.0.15/Native Method)
        - waiting on <0x00000000811fe140> (a org.eclipse.osgi.framework.eventmgr.EventManager$EventThread)
        at java.lang.Object.wait(java.base@11.0.15/Object.java:328)
        at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.getNextEvent(EventManager.java:400)
        - waiting to re-lock in wait() <0x00000000811fe140> (a org.eclipse.osgi.framework.eventmgr.EventManager$EventThread)
        at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:341)

   Locked ownable synchronizers:
        - None

"Start Level: Equinox Container: e1a46c0f-ebe2-43b3-a869-f52e91c4dd8d" eclipse-equinox/p2#24 daemon prio=5 os_prio=0 cpu=615,00ms elapsed=61,89s tid=0x00007fad78802800 nid=0x9a7 in Object.wait()  [0x00007fad055ad000]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(java.base@11.0.15/Native Method)
        - waiting on <0x0000000081200000> (a org.eclipse.osgi.framework.eventmgr.EventManager$EventThread)
        at java.lang.Object.wait(java.base@11.0.15/Object.java:328)
        at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.getNextEvent(EventManager.java:400)
        - waiting to re-lock in wait() <0x0000000081200000> (a org.eclipse.osgi.framework.eventmgr.EventManager$EventThread)
        at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:341)

   Locked ownable synchronizers:
        - None

"SCR Component Actor" eclipse-equinox/equinox.framework#25 daemon prio=5 os_prio=0 cpu=1,49ms elapsed=61,87s tid=0x00007faca0031800 nid=0x9a8 waiting for monitor entry  [0x00007fad04ca8000]
   java.lang.Thread.State: BLOCKED (on object monitor)
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.getService(ServiceRegistrationImpl.java:541)
        - waiting to lock <0x000000009260e008> (a org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse)
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.getService(ServiceRegistry.java:534)
        at org.eclipse.osgi.internal.framework.BundleContextImpl.getService(BundleContextImpl.java:660)
        at org.apache.felix.scr.impl.manager.SingleRefPair.getServiceObject(SingleRefPair.java:88)
        at org.apache.felix.scr.impl.inject.methods.BindMethod.getServiceObject(BindMethod.java:675)
        at org.apache.felix.scr.impl.manager.DependencyManager.getServiceObject(DependencyManager.java:2545)
        at org.apache.felix.scr.impl.manager.DependencyManager$MultipleDynamicCustomizer.prebind(DependencyManager.java:431)
        at org.apache.felix.scr.impl.manager.DependencyManager.prebind(DependencyManager.java:1822)
        at org.apache.felix.scr.impl.manager.AbstractComponentManager.collectDependencies(AbstractComponentManager.java:1057)
        at org.apache.felix.scr.impl.manager.SingleComponentManager.getServiceInternal(SingleComponentManager.java:953)
        at org.apache.felix.scr.impl.manager.SingleComponentManager.getService(SingleComponentManager.java:918)
        at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse$1.run(ServiceFactoryUse.java:220)
        at java.security.AccessController.doPrivileged(java.base@11.0.15/Native Method)
        at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.factoryGetService(ServiceFactoryUse.java:217)
        at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.getService(ServiceFactoryUse.java:118)
        at org.eclipse.osgi.internal.serviceregistry.ServiceConsumer$2.getService(ServiceConsumer.java:48)
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.getService(ServiceRegistrationImpl.java:547)
        - locked <0x0000000092005488> (a org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse)
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.getService(ServiceRegistry.java:534)
        at org.eclipse.osgi.internal.framework.BundleContextImpl.getService(BundleContextImpl.java:660)
        at org.apache.felix.scr.impl.manager.SingleRefPair.getServiceObject(SingleRefPair.java:88)
        at org.apache.felix.scr.impl.inject.field.FieldHandler$ReferenceMethodImpl.getServiceObject(FieldHandler.java:525)
        at org.apache.felix.scr.impl.manager.DependencyManager.getServiceObject(DependencyManager.java:2545)
        at org.apache.felix.scr.impl.manager.DependencyManager$SingleStaticCustomizer.prebind(DependencyManager.java:1392)
        at org.apache.felix.scr.impl.manager.DependencyManager.prebind(DependencyManager.java:1822)
        at org.apache.felix.scr.impl.manager.AbstractComponentManager.collectDependencies(AbstractComponentManager.java:1057)
        at org.apache.felix.scr.impl.manager.SingleComponentManager.getServiceInternal(SingleComponentManager.java:953)
        at org.apache.felix.scr.impl.manager.SingleComponentManager.getService(SingleComponentManager.java:918)
        at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse$1.run(ServiceFactoryUse.java:220)
        at java.security.AccessController.doPrivileged(java.base@11.0.15/Native Method)
        at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.factoryGetService(ServiceFactoryUse.java:217)
        at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.getService(ServiceFactoryUse.java:118)
        at org.eclipse.osgi.internal.serviceregistry.ServiceConsumer$2.getService(ServiceConsumer.java:48)
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.getService(ServiceRegistrationImpl.java:547)
        - locked <0x0000000092004c80> (a org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse)
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.getService(ServiceRegistry.java:534)
        at org.eclipse.osgi.internal.framework.BundleContextImpl.getService(BundleContextImpl.java:660)
        at org.apache.felix.scr.impl.manager.SingleRefPair.getServiceObject(SingleRefPair.java:88)
        at org.apache.felix.scr.impl.inject.field.FieldHandler$ReferenceMethodImpl.getServiceObject(FieldHandler.java:525)
        at org.apache.felix.scr.impl.manager.DependencyManager.getServiceObject(DependencyManager.java:2545)
        at org.apache.felix.scr.impl.manager.DependencyManager.doInvokeBindMethod(DependencyManager.java:2064)
        at org.apache.felix.scr.impl.manager.DependencyManager.invokeBindMethod(DependencyManager.java:2047)
        at org.apache.felix.scr.impl.manager.SingleComponentManager.invokeBindMethod(SingleComponentManager.java:443)
        at org.apache.felix.scr.impl.manager.DependencyManager.invokeBindMethodLate(DependencyManager.java:1990)
        at org.apache.felix.scr.impl.ComponentRegistry$2.run(ComponentRegistry.java:578)
        at org.apache.felix.scr.impl.ComponentActorThread.run(ComponentActorThread.java:114)
        at java.lang.Thread.run(java.base@11.0.15/Thread.java:829)

   Locked ownable synchronizers:
        - None

"EMF Reference Cleaner" eclipse-equinox/equinox.framework#27 daemon prio=5 os_prio=0 cpu=0,90ms elapsed=61,63s tid=0x00007faca022c000 nid=0x9aa in Object.wait()  [0x00007fad046aa000]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(java.base@11.0.15/Native Method)
        - waiting on <0x00000000811d0668> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(java.base@11.0.15/ReferenceQueue.java:155)
        - waiting to re-lock in wait() <0x00000000811d0668> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(java.base@11.0.15/ReferenceQueue.java:176)
        at org.eclipse.emf.common.util.CommonUtil$1ReferenceClearingQueuePollingThread.run(CommonUtil.java:70)

   Locked ownable synchronizers:
        - None

"Worker-JM" #29 prio=5 os_prio=0 cpu=0,12ms elapsed=61,37s tid=0x00007faca049e000 nid=0x9ab in Object.wait()  [0x00007fad043a9000]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(java.base@11.0.15/Native Method)
        - waiting on <0x00000000814697f0> (a java.util.ArrayList)
        at org.eclipse.core.internal.jobs.InternalWorker.run(InternalWorker.java:61)
        - waiting to re-lock in wait() <0x00000000814697f0> (a java.util.ArrayList)

   Locked ownable synchronizers:
        - None

"Bundle File Closer" eclipse-equinox/equinox.framework#30 daemon prio=5 os_prio=0 cpu=4,35ms elapsed=61,27s tid=0x00007faca050c800 nid=0x9ac in Object.wait()  [0x00007fad042a8000]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(java.base@11.0.15/Native Method)
        - waiting on <0x00000000814764f0> (a org.eclipse.osgi.framework.eventmgr.EventManager$EventThread)
        at java.lang.Object.wait(java.base@11.0.15/Object.java:328)
        at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.getNextEvent(EventManager.java:400)
        - waiting to re-lock in wait() <0x00000000814764f0> (a org.eclipse.osgi.framework.eventmgr.EventManager$EventThread)
        at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:341)

   Locked ownable synchronizers:
        - None

"logback configurator timer" eclipse-equinox/equinox.framework#31 daemon prio=5 os_prio=0 cpu=79,71ms elapsed=61,11s tid=0x00007faca06ac800 nid=0x9ad in Object.wait()  [0x00007fad041a7000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
        at java.lang.Object.wait(java.base@11.0.15/Native Method)
        - waiting on <no object reference available>
        at java.util.TimerThread.mainLoop(java.base@11.0.15/Timer.java:553)
        - waiting to re-lock in wait() <0x000000008f71e6d8> (a java.util.TaskQueue)
        at java.util.TimerThread.run(java.base@11.0.15/Timer.java:506)

   Locked ownable synchronizers:
        - None

"Gogo shell" eclipse-equinox/equinox.framework#33 prio=5 os_prio=0 cpu=8,71ms elapsed=61,08s tid=0x00007fad788b7000 nid=0x9ae waiting on condition  [0x00007fac97bfe000]
   java.lang.Thread.State: WAITING (parking)
        at jdk.internal.misc.Unsafe.park(java.base@11.0.15/Native Method)
        - parking to wait for  <0x000000008f70f8d8> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
        at java.util.concurrent.locks.LockSupport.park(java.base@11.0.15/LockSupport.java:194)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(java.base@11.0.15/AbstractQueuedSynchronizer.java:2081)
        at java.util.concurrent.LinkedBlockingQueue.take(java.base@11.0.15/LinkedBlockingQueue.java:433)
        at java.util.concurrent.ThreadPoolExecutor.getTask(java.base@11.0.15/ThreadPoolExecutor.java:1054)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@11.0.15/ThreadPoolExecutor.java:1114)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@11.0.15/ThreadPoolExecutor.java:628)
        at java.lang.Thread.run(java.base@11.0.15/Thread.java:829)

   Locked ownable synchronizers:
        - None

"Worker-0" eclipse-equinox/equinox.framework#37 prio=5 os_prio=0 cpu=0,13ms elapsed=59,05s tid=0x00007fad78f7f000 nid=0x9be in Object.wait()  [0x00007fad3efc1000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
        at java.lang.Object.wait(java.base@11.0.15/Native Method)
        - waiting on <0x00000000815c23b8> (a org.eclipse.core.internal.jobs.WorkerPool)
        at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:200)
        - waiting to re-lock in wait() <0x00000000815c23b8> (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

"Attach Listener" eclipse-equinox/equinox.framework#38 daemon prio=9 os_prio=0 cpu=82,22ms elapsed=22,55s tid=0x00007fad28001000 nid=0xbb2 waiting on condition  [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
        - None

"RMI TCP Accept-0" eclipse-equinox/equinox.framework#39 daemon prio=9 os_prio=0 cpu=0,72ms elapsed=15,75s tid=0x00007fac782ac000 nid=0xbce runnable  [0x00007fad3f0c2000]
   java.lang.Thread.State: RUNNABLE
        at java.net.PlainSocketImpl.socketAccept(java.base@11.0.15/Native Method)
        at java.net.AbstractPlainSocketImpl.accept(java.base@11.0.15/AbstractPlainSocketImpl.java:474)
        at java.net.ServerSocket.implAccept(java.base@11.0.15/ServerSocket.java:565)
        at java.net.ServerSocket.accept(java.base@11.0.15/ServerSocket.java:533)
        at sun.management.jmxremote.LocalRMIServerSocketFactory$1.accept(jdk.management.agent@11.0.15/LocalRMIServerSocketFactory.java:52)
        at sun.rmi.transport.tcp.TCPTransport$AcceptLoop.executeAcceptLoop(java.rmi@11.0.15/TCPTransport.java:394)
        at sun.rmi.transport.tcp.TCPTransport$AcceptLoop.run(java.rmi@11.0.15/TCPTransport.java:366)
        at java.lang.Thread.run(java.base@11.0.15/Thread.java:829)

   Locked ownable synchronizers:
        - None

"RMI TCP Connection(1)-127.0.0.1" eclipse-equinox/equinox.framework#40 daemon prio=9 os_prio=0 cpu=72,34ms elapsed=15,74s tid=0x00007facc4020800 nid=0xbd0 runnable  [0x00007fad06268000]
   java.lang.Thread.State: RUNNABLE
        at java.net.SocketInputStream.socketRead0(java.base@11.0.15/Native Method)
        at java.net.SocketInputStream.socketRead(java.base@11.0.15/SocketInputStream.java:115)
        at java.net.SocketInputStream.read(java.base@11.0.15/SocketInputStream.java:168)
        at java.net.SocketInputStream.read(java.base@11.0.15/SocketInputStream.java:140)
        at java.io.BufferedInputStream.fill(java.base@11.0.15/BufferedInputStream.java:252)
        at java.io.BufferedInputStream.read(java.base@11.0.15/BufferedInputStream.java:271)
        - locked <0x0000000091a98168> (a java.io.BufferedInputStream)
        at java.io.FilterInputStream.read(java.base@11.0.15/FilterInputStream.java:83)
        at sun.rmi.transport.tcp.TCPTransport.handleMessages(java.rmi@11.0.15/TCPTransport.java:544)
        at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(java.rmi@11.0.15/TCPTransport.java:796)
        at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(java.rmi@11.0.15/TCPTransport.java:677)
        at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler$$Lambda$298/0x00000008403f1c40.run(java.rmi@11.0.15/Unknown Source)
        at java.security.AccessController.doPrivileged(java.base@11.0.15/Native Method)
        at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(java.rmi@11.0.15/TCPTransport.java:676)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@11.0.15/ThreadPoolExecutor.java:1128)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@11.0.15/ThreadPoolExecutor.java:628)
        at java.lang.Thread.run(java.base@11.0.15/Thread.java:829)

   Locked ownable synchronizers:
        - <0x0000000091bf7388> (a java.util.concurrent.ThreadPoolExecutor$Worker)

"RMI Scheduler(0)" eclipse-equinox/equinox.framework#41 daemon prio=9 os_prio=0 cpu=0,24ms elapsed=15,73s tid=0x00007faccc260000 nid=0xbd1 waiting on condition  [0x00007fad06a79000]
   java.lang.Thread.State: TIMED_WAITING (parking)
        at jdk.internal.misc.Unsafe.park(java.base@11.0.15/Native Method)
        - parking to wait for  <0x0000000091be2df8> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
        at java.util.concurrent.locks.LockSupport.parkNanos(java.base@11.0.15/LockSupport.java:234)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(java.base@11.0.15/AbstractQueuedSynchronizer.java:2123)
        at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@11.0.15/ScheduledThreadPoolExecutor.java:1182)
        at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(java.base@11.0.15/ScheduledThreadPoolExecutor.java:899)
        at java.util.concurrent.ThreadPoolExecutor.getTask(java.base@11.0.15/ThreadPoolExecutor.java:1054)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@11.0.15/ThreadPoolExecutor.java:1114)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@11.0.15/ThreadPoolExecutor.java:628)
        at java.lang.Thread.run(java.base@11.0.15/Thread.java:829)

   Locked ownable synchronizers:
        - None

"JMX server connection timeout 42" eclipse-equinox/equinox.framework#42 daemon prio=9 os_prio=0 cpu=5,89ms elapsed=15,72s tid=0x00007faccc067000 nid=0xbd2 in Object.wait()  [0x00007fad05ebb000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
        at java.lang.Object.wait(java.base@11.0.15/Native Method)
        - waiting on <no object reference available>
        at com.sun.jmx.remote.internal.ServerCommunicatorAdmin$Timeout.run(java.management@11.0.15/ServerCommunicatorAdmin.java:171)
        - waiting to re-lock in wait() <0x0000000091affd98> (a [I)
        at java.lang.Thread.run(java.base@11.0.15/Thread.java:829)

   Locked ownable synchronizers:
        - None

"RMI TCP Connection(2)-127.0.0.1" eclipse-equinox/equinox.framework#43 daemon prio=9 os_prio=0 cpu=48,48ms elapsed=14,65s tid=0x00007facc4021800 nid=0xbdd runnable  [0x00007fad3f2c2000]
   java.lang.Thread.State: RUNNABLE
        at java.net.SocketInputStream.socketRead0(java.base@11.0.15/Native Method)
        at java.net.SocketInputStream.socketRead(java.base@11.0.15/SocketInputStream.java:115)
        at java.net.SocketInputStream.read(java.base@11.0.15/SocketInputStream.java:168)
        at java.net.SocketInputStream.read(java.base@11.0.15/SocketInputStream.java:140)
        at java.io.BufferedInputStream.fill(java.base@11.0.15/BufferedInputStream.java:252)
        at java.io.BufferedInputStream.read(java.base@11.0.15/BufferedInputStream.java:271)
        - locked <0x00000000918f86c8> (a java.io.BufferedInputStream)
        at java.io.FilterInputStream.read(java.base@11.0.15/FilterInputStream.java:83)
        at sun.rmi.transport.tcp.TCPTransport.handleMessages(java.rmi@11.0.15/TCPTransport.java:544)
        at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(java.rmi@11.0.15/TCPTransport.java:796)
        at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(java.rmi@11.0.15/TCPTransport.java:677)
        at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler$$Lambda$298/0x00000008403f1c40.run(java.rmi@11.0.15/Unknown Source)
        at java.security.AccessController.doPrivileged(java.base@11.0.15/Native Method)
        at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(java.rmi@11.0.15/TCPTransport.java:676)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@11.0.15/ThreadPoolExecutor.java:1128)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@11.0.15/ThreadPoolExecutor.java:628)
        at java.lang.Thread.run(java.base@11.0.15/Thread.java:829)

   Locked ownable synchronizers:
        - <0x0000000091bf78c0> (a java.util.concurrent.ThreadPoolExecutor$Worker)

"VM Thread" os_prio=0 cpu=57,88ms elapsed=62,51s tid=0x00007fad78213800 nid=0x983 runnable  

"GC Thread#0" os_prio=0 cpu=43,49ms elapsed=62,52s tid=0x00007fad78032800 nid=0x97d runnable  

"GC Thread#1" os_prio=0 cpu=42,71ms elapsed=62,12s tid=0x00007fad38001000 nid=0x994 runnable  

"GC Thread#2" os_prio=0 cpu=43,49ms elapsed=62,12s tid=0x00007fad38002800 nid=0x995 runnable  

"GC Thread#3" os_prio=0 cpu=41,78ms elapsed=62,12s tid=0x00007fad38004800 nid=0x996 runnable  

"GC Thread#4" os_prio=0 cpu=41,92ms elapsed=62,12s tid=0x00007fad38006000 nid=0x997 runnable  

"GC Thread#5" os_prio=0 cpu=43,14ms elapsed=62,12s tid=0x00007fad38008000 nid=0x998 runnable  

"GC Thread#6" os_prio=0 cpu=7,47ms elapsed=61,06s tid=0x00007fad3800c000 nid=0x9b1 runnable  

"GC Thread#7" os_prio=0 cpu=7,40ms elapsed=61,06s tid=0x00007fad3800d800 nid=0x9b2 runnable  

"GC Thread#8" os_prio=0 cpu=7,53ms elapsed=61,06s tid=0x00007fad38017800 nid=0x9b3 runnable  

"GC Thread#9" os_prio=0 cpu=7,12ms elapsed=61,06s tid=0x00007fad38018800 nid=0x9b4 runnable  

"GC Thread#10" os_prio=0 cpu=8,01ms elapsed=61,06s tid=0x00007fad3801a000 nid=0x9b5 runnable  

"GC Thread#11" os_prio=0 cpu=7,24ms elapsed=61,06s tid=0x00007fad3801c000 nid=0x9b6 runnable  

"G1 Main Marker" os_prio=0 cpu=0,63ms elapsed=62,52s tid=0x00007fad78065800 nid=0x97e runnable  

"G1 Conc#0" os_prio=0 cpu=24,50ms elapsed=62,52s tid=0x00007fad78067800 nid=0x97f runnable  

"G1 Conc#1" os_prio=0 cpu=23,27ms elapsed=61,06s tid=0x00007fad50001000 nid=0x9b7 runnable  

"G1 Conc#2" os_prio=0 cpu=22,91ms elapsed=61,06s tid=0x00007fad50002800 nid=0x9b8 runnable  

"G1 Refine#0" os_prio=0 cpu=10,38ms elapsed=62,52s tid=0x00007fad78172800 nid=0x980 runnable  

"G1 Refine#1" os_prio=0 cpu=2,47ms elapsed=62,11s tid=0x00007fad4c001000 nid=0x999 runnable  

"G1 Refine#2" os_prio=0 cpu=1,90ms elapsed=62,11s tid=0x00007facd8001000 nid=0x99a runnable  

"G1 Refine#3" os_prio=0 cpu=1,19ms elapsed=61,90s tid=0x00007facdc001800 nid=0x9a1 runnable  

"G1 Refine#4" os_prio=0 cpu=0,93ms elapsed=61,90s tid=0x00007facb8001000 nid=0x9a2 runnable  

"G1 Refine#5" os_prio=0 cpu=0,76ms elapsed=61,90s tid=0x00007facbc001000 nid=0x9a3 runnable  

"G1 Refine#6" os_prio=0 cpu=0,56ms elapsed=61,90s tid=0x00007facb0001000 nid=0x9a4 runnable  

"G1 Refine#7" os_prio=0 cpu=0,41ms elapsed=61,90s tid=0x00007facb4001000 nid=0x9a5 runnable  

"G1 Young RemSet Sampling" os_prio=0 cpu=5,98ms elapsed=62,52s tid=0x00007fad78174800 nid=0x981 runnable  
"StrDedup" os_prio=0 cpu=20,83ms elapsed=62,52s tid=0x00007fad7817c000 nid=0x982 runnable  

"VM Periodic Task Thread" os_prio=0 cpu=14,94ms elapsed=62,48s tid=0x00007fad78288000 nid=0x98f waiting on condition  

JNI global refs: 96, weak refs: 0


Found one Java-level deadlock:
=============================
"main":
  waiting to lock monitor 0x00007fad34006700 (object 0x0000000092005488, a org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse),
  which is held by "SCR Component Actor"
"SCR Component Actor":
  waiting to lock monitor 0x00007fad34008e00 (object 0x000000009260e008, a org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse),
  which is held by "main"

Java stack information for the threads listed above:
===================================================
"main":
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.getService(ServiceRegistrationImpl.java:541)
        - waiting to lock <0x0000000092005488> (a org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse)
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.getService(ServiceRegistry.java:534)
        at org.eclipse.osgi.internal.framework.BundleContextImpl.getService(BundleContextImpl.java:660)
        at org.apache.felix.scr.impl.manager.SingleRefPair.getServiceObject(SingleRefPair.java:88)
        at org.apache.felix.scr.impl.inject.field.FieldHandler$ReferenceMethodImpl.getServiceObject(FieldHandler.java:525)
        at org.apache.felix.scr.impl.manager.DependencyManager.getServiceObject(DependencyManager.java:2545)
        at org.apache.felix.scr.impl.manager.DependencyManager$SingleStaticCustomizer.prebind(DependencyManager.java:1392)
        at org.apache.felix.scr.impl.manager.DependencyManager.prebind(DependencyManager.java:1822)
        at org.apache.felix.scr.impl.manager.AbstractComponentManager.collectDependencies(AbstractComponentManager.java:1057)
        at org.apache.felix.scr.impl.manager.SingleComponentManager.getServiceInternal(SingleComponentManager.java:953)
        at org.apache.felix.scr.impl.manager.SingleComponentManager.getService(SingleComponentManager.java:918)
        at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse$1.run(ServiceFactoryUse.java:220)
        at java.security.AccessController.doPrivileged(java.base@11.0.15/Native Method)
        at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.factoryGetService(ServiceFactoryUse.java:217)
        at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.getService(ServiceFactoryUse.java:118)
        at org.eclipse.osgi.internal.serviceregistry.ServiceConsumer$2.getService(ServiceConsumer.java:48)
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.getService(ServiceRegistrationImpl.java:547)
        - locked <0x000000009202cea8> (a org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse)
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.getService(ServiceRegistry.java:534)
        at org.eclipse.osgi.internal.framework.BundleContextImpl.getService(BundleContextImpl.java:660)
        at org.apache.felix.scr.impl.manager.SingleRefPair.getServiceObject(SingleRefPair.java:88)
        at org.apache.felix.scr.impl.inject.field.FieldHandler$ReferenceMethodImpl.getServiceObject(FieldHandler.java:525)
        at org.apache.felix.scr.impl.manager.DependencyManager.getServiceObject(DependencyManager.java:2545)
        at org.apache.felix.scr.impl.manager.DependencyManager$SingleStaticCustomizer.prebind(DependencyManager.java:1392)
        at org.apache.felix.scr.impl.manager.DependencyManager.prebind(DependencyManager.java:1822)
        at org.apache.felix.scr.impl.manager.AbstractComponentManager.collectDependencies(AbstractComponentManager.java:1057)
        at org.apache.felix.scr.impl.manager.SingleComponentManager.getServiceInternal(SingleComponentManager.java:953)
        at org.apache.felix.scr.impl.manager.SingleComponentManager.getService(SingleComponentManager.java:918)
        at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse$1.run(ServiceFactoryUse.java:220)
        at java.security.AccessController.doPrivileged(java.base@11.0.15/Native Method)
        at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.factoryGetService(ServiceFactoryUse.java:217)
        at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.getService(ServiceFactoryUse.java:118)
        at org.eclipse.osgi.internal.serviceregistry.ServiceConsumer$2.getService(ServiceConsumer.java:48)
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.getService(ServiceRegistrationImpl.java:547)
        - locked <0x000000009260e008> (a org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse)
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.getService(ServiceRegistry.java:534)
        at org.eclipse.osgi.internal.framework.BundleContextImpl.getService(BundleContextImpl.java:660)
        at org.apache.felix.scr.impl.manager.SingleRefPair.getServiceObject(SingleRefPair.java:88)
        at org.apache.felix.scr.impl.inject.methods.BindMethod.getServiceObject(BindMethod.java:675)
        at org.apache.felix.scr.impl.manager.DependencyManager.getServiceObject(DependencyManager.java:2545)
        at org.apache.felix.scr.impl.manager.DependencyManager$MultipleDynamicCustomizer.prebind(DependencyManager.java:431)
        at org.apache.felix.scr.impl.manager.DependencyManager.prebind(DependencyManager.java:1822)
        at org.apache.felix.scr.impl.manager.AbstractComponentManager.collectDependencies(AbstractComponentManager.java:1057)
        at org.apache.felix.scr.impl.manager.SingleComponentManager.getServiceInternal(SingleComponentManager.java:953)
        at org.apache.felix.scr.impl.manager.SingleComponentManager.getService(SingleComponentManager.java:918)
        at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse$1.run(ServiceFactoryUse.java:220)
        at java.security.AccessController.doPrivileged(java.base@11.0.15/Native Method)
        at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.factoryGetService(ServiceFactoryUse.java:217)
        at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.getService(ServiceFactoryUse.java:118)
        at org.eclipse.osgi.internal.serviceregistry.ServiceConsumer$2.getService(ServiceConsumer.java:48)
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.getService(ServiceRegistrationImpl.java:547)
        - locked <0x000000009278e348> (a org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse)
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.getService(ServiceRegistry.java:534)
        at org.eclipse.osgi.internal.framework.BundleContextImpl.getService(BundleContextImpl.java:660)
        at org.apache.felix.scr.impl.manager.SingleRefPair.getServiceObject(SingleRefPair.java:88)
        at org.apache.felix.scr.impl.inject.field.FieldHandler$ReferenceMethodImpl.getServiceObject(FieldHandler.java:525)
        at org.apache.felix.scr.impl.manager.DependencyManager.getServiceObject(DependencyManager.java:2545)
        at org.apache.felix.scr.impl.manager.DependencyManager$SingleStaticCustomizer.prebind(DependencyManager.java:1392)
        at org.apache.felix.scr.impl.manager.DependencyManager.prebind(DependencyManager.java:1822)
        at org.apache.felix.scr.impl.manager.AbstractComponentManager.collectDependencies(AbstractComponentManager.java:1057)
        at org.apache.felix.scr.impl.manager.SingleComponentManager.getServiceInternal(SingleComponentManager.java:953)
        at org.apache.felix.scr.impl.manager.SingleComponentManager.getService(SingleComponentManager.java:918)
        at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse$1.run(ServiceFactoryUse.java:220)
        at java.security.AccessController.doPrivileged(java.base@11.0.15/Native Method)
        at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.factoryGetService(ServiceFactoryUse.java:217)
        at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.getService(ServiceFactoryUse.java:118)
        at org.eclipse.osgi.internal.serviceregistry.ServiceConsumer$2.getService(ServiceConsumer.java:48)
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.getService(ServiceRegistrationImpl.java:547)
        - locked <0x0000000092937230> (a org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse)
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.getService(ServiceRegistry.java:534)
        at org.eclipse.osgi.internal.framework.BundleContextImpl.getService(BundleContextImpl.java:660)
        at org.apache.felix.scr.impl.manager.SingleRefPair.getServiceObject(SingleRefPair.java:88)
        at org.apache.felix.scr.impl.inject.methods.BindMethod.getServiceObject(BindMethod.java:675)
        at org.apache.felix.scr.impl.manager.DependencyManager.getServiceObject(DependencyManager.java:2545)
        at org.apache.felix.scr.impl.manager.DependencyManager$MultipleDynamicCustomizer.prebind(DependencyManager.java:431)
        at org.apache.felix.scr.impl.manager.DependencyManager.prebind(DependencyManager.java:1822)
        at org.apache.felix.scr.impl.manager.AbstractComponentManager.collectDependencies(AbstractComponentManager.java:1057)
        at org.apache.felix.scr.impl.manager.SingleComponentManager.getServiceInternal(SingleComponentManager.java:953)
        at org.apache.felix.scr.impl.manager.AbstractComponentManager.activateInternal(AbstractComponentManager.java:785)
        at org.apache.felix.scr.impl.manager.DependencyManager$SingleStaticCustomizer.addedService(DependencyManager.java:1271)
        at org.apache.felix.scr.impl.manager.DependencyManager$SingleStaticCustomizer.addedService(DependencyManager.java:1222)
        at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.customizerAdded(ServiceTracker.java:1200)
        at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.customizerAdded(ServiceTracker.java:1121)
        at org.apache.felix.scr.impl.manager.ServiceTracker$AbstractTracked.trackAdding(ServiceTracker.java:928)
        at org.apache.felix.scr.impl.manager.ServiceTracker$AbstractTracked.track(ServiceTracker.java:864)
        at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.serviceChanged(ServiceTracker.java:1152)
        at org.apache.felix.scr.impl.BundleComponentActivator$ListenerInfo.serviceChanged(BundleComponentActivator.java:114)
        at org.eclipse.osgi.internal.serviceregistry.FilteredServiceListener.serviceChanged(FilteredServiceListener.java:123)
        at org.eclipse.osgi.internal.framework.BundleContextImpl.dispatchEvent(BundleContextImpl.java:961)
        at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:234)
        at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:151)
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEventPrivileged(ServiceRegistry.java:937)
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEvent(ServiceRegistry.java:874)
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.register(ServiceRegistrationImpl.java:141)
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.registerService(ServiceRegistry.java:262)
        at org.eclipse.osgi.internal.framework.BundleContextImpl.registerService(BundleContextImpl.java:500)
        at org.eclipse.osgi.internal.framework.BundleContextImpl.registerService(BundleContextImpl.java:519)
        at org.eclipse.osgi.internal.framework.BundleContextImpl.registerService(BundleContextImpl.java:1047)
        at org.eclipse.core.resources.ResourcesPlugin$WorkspaceInitCustomizer.addingService(ResourcesPlugin.java:528)
        at org.eclipse.core.resources.ResourcesPlugin$WorkspaceInitCustomizer.addingService(ResourcesPlugin.java:1)
        at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:943)
        at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:1)
        at org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256)
        at org.osgi.util.tracker.AbstractTracked.trackInitial(AbstractTracked.java:183)
        at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:321)
        at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:264)
        at org.eclipse.core.resources.ResourcesPlugin.start(ResourcesPlugin.java:499)
        at org.eclipse.osgi.internal.framework.BundleContextImpl$2.run(BundleContextImpl.java:818)
        at org.eclipse.osgi.internal.framework.BundleContextImpl$2.run(BundleContextImpl.java:1)
        at java.security.AccessController.doPrivileged(java.base@11.0.15/Native Method)
        at org.eclipse.osgi.internal.framework.BundleContextImpl.startActivator(BundleContextImpl.java:810)
        at org.eclipse.osgi.internal.framework.BundleContextImpl.start(BundleContextImpl.java:767)
        at org.eclipse.osgi.internal.framework.EquinoxBundle.startWorker0(EquinoxBundle.java:1032)
        at org.eclipse.osgi.internal.framework.EquinoxBundle$EquinoxModule.startWorker(EquinoxBundle.java:371)
        at org.eclipse.osgi.container.Module.doStart(Module.java:605)
        at org.eclipse.osgi.container.Module.start(Module.java:468)
        at org.eclipse.osgi.framework.util.SecureAction.start(SecureAction.java:513)
        at org.eclipse.osgi.internal.hooks.EclipseLazyStarter.postFindLocalClass(EclipseLazyStarter.java:117)
        at org.eclipse.osgi.internal.loader.classpath.ClasspathManager.findLocalClass(ClasspathManager.java:570)
        at org.eclipse.osgi.internal.loader.ModuleClassLoader.findLocalClass(ModuleClassLoader.java:335)
        at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:397)
        at org.eclipse.osgi.internal.loader.sources.SingleSourcePackage.loadClass(SingleSourcePackage.java:41)
        at org.eclipse.osgi.internal.loader.BundleLoader.findClass0(BundleLoader.java:496)
        at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:416)
        at org.eclipse.osgi.internal.loader.ModuleClassLoader.loadClass(ModuleClassLoader.java:168)
        at java.lang.ClassLoader.loadClass(java.base@11.0.15/ClassLoader.java:522)
        at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:153)
        at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203)
        at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:136)
        at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
        at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:402)
        at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255)
        at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(java.base@11.0.15/Native Method)
        at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(java.base@11.0.15/NativeMethodAccessorImpl.java:62)
        at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(java.base@11.0.15/DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(java.base@11.0.15/Method.java:566)
        at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:659)
        at org.eclipse.equinox.launcher.Main.basicRun(Main.java:596)
        at org.eclipse.equinox.launcher.Main.run(Main.java:1467)
        at org.eclipse.equinox.launcher.Main.main(Main.java:1440)
"SCR Component Actor":
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.getService(ServiceRegistrationImpl.java:541)
        - waiting to lock <0x000000009260e008> (a org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse)
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.getService(ServiceRegistry.java:534)
        at org.eclipse.osgi.internal.framework.BundleContextImpl.getService(BundleContextImpl.java:660)
        at org.apache.felix.scr.impl.manager.SingleRefPair.getServiceObject(SingleRefPair.java:88)
        at org.apache.felix.scr.impl.inject.methods.BindMethod.getServiceObject(BindMethod.java:675)
        at org.apache.felix.scr.impl.manager.DependencyManager.getServiceObject(DependencyManager.java:2545)
        at org.apache.felix.scr.impl.manager.DependencyManager$MultipleDynamicCustomizer.prebind(DependencyManager.java:431)
        at org.apache.felix.scr.impl.manager.DependencyManager.prebind(DependencyManager.java:1822)
        at org.apache.felix.scr.impl.manager.AbstractComponentManager.collectDependencies(AbstractComponentManager.java:1057)
        at org.apache.felix.scr.impl.manager.SingleComponentManager.getServiceInternal(SingleComponentManager.java:953)
        at org.apache.felix.scr.impl.manager.SingleComponentManager.getService(SingleComponentManager.java:918)
        at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse$1.run(ServiceFactoryUse.java:220)
        at java.security.AccessController.doPrivileged(java.base@11.0.15/Native Method)
        at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.factoryGetService(ServiceFactoryUse.java:217)
        at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.getService(ServiceFactoryUse.java:118)
        at org.eclipse.osgi.internal.serviceregistry.ServiceConsumer$2.getService(ServiceConsumer.java:48)
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.getService(ServiceRegistrationImpl.java:547)
        - locked <0x0000000092005488> (a org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse)
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.getService(ServiceRegistry.java:534)
        at org.eclipse.osgi.internal.framework.BundleContextImpl.getService(BundleContextImpl.java:660)
        at org.apache.felix.scr.impl.manager.SingleRefPair.getServiceObject(SingleRefPair.java:88)
        at org.apache.felix.scr.impl.inject.field.FieldHandler$ReferenceMethodImpl.getServiceObject(FieldHandler.java:525)
        at org.apache.felix.scr.impl.manager.DependencyManager.getServiceObject(DependencyManager.java:2545)
        at org.apache.felix.scr.impl.manager.DependencyManager$SingleStaticCustomizer.prebind(DependencyManager.java:1392)
        at org.apache.felix.scr.impl.manager.DependencyManager.prebind(DependencyManager.java:1822)
        at org.apache.felix.scr.impl.manager.AbstractComponentManager.collectDependencies(AbstractComponentManager.java:1057)
        at org.apache.felix.scr.impl.manager.SingleComponentManager.getServiceInternal(SingleComponentManager.java:953)
        at org.apache.felix.scr.impl.manager.SingleComponentManager.getService(SingleComponentManager.java:918)
        at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse$1.run(ServiceFactoryUse.java:220)
        at java.security.AccessController.doPrivileged(java.base@11.0.15/Native Method)
        at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.factoryGetService(ServiceFactoryUse.java:217)
        at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.getService(ServiceFactoryUse.java:118)
        at org.eclipse.osgi.internal.serviceregistry.ServiceConsumer$2.getService(ServiceConsumer.java:48)
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.getService(ServiceRegistrationImpl.java:547)
        - locked <0x0000000092004c80> (a org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse)
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.getService(ServiceRegistry.java:534)
        at org.eclipse.osgi.internal.framework.BundleContextImpl.getService(BundleContextImpl.java:660)
        at org.apache.felix.scr.impl.manager.SingleRefPair.getServiceObject(SingleRefPair.java:88)
        at org.apache.felix.scr.impl.inject.field.FieldHandler$ReferenceMethodImpl.getServiceObject(FieldHandler.java:525)
        at org.apache.felix.scr.impl.manager.DependencyManager.getServiceObject(DependencyManager.java:2545)
        at org.apache.felix.scr.impl.manager.DependencyManager.doInvokeBindMethod(DependencyManager.java:2064)
        at org.apache.felix.scr.impl.manager.DependencyManager.invokeBindMethod(DependencyManager.java:2047)
        at org.apache.felix.scr.impl.manager.SingleComponentManager.invokeBindMethod(SingleComponentManager.java:443)
        at org.apache.felix.scr.impl.manager.DependencyManager.invokeBindMethodLate(DependencyManager.java:1990)
        at org.apache.felix.scr.impl.ComponentRegistry$2.run(ComponentRegistry.java:578)
        at org.apache.felix.scr.impl.ComponentActorThread.run(ComponentActorThread.java:114)
        at java.lang.Thread.run(java.base@11.0.15/Thread.java:829)

Found 1 deadlock.
@tjwatson
Copy link
Contributor

Does clearing out our configuration/org.eclipse.osgi framework storage area help get past this? Running with -clean does this.

@tjwatson
Copy link
Contributor

Although I'm a maintainer of Felix SCR, I must admit that I am not that familiar with how this "SCR Component Actor" thread is used. From looking at the code it seems that it does async work for calls to org.osgi.service.component.ComponentContext.enableComponent(String) or org.osgi.service.component.runtime.ServiceComponentRuntime.enableComponent(ComponentDescriptionDTO). It would appear there is some cycle in the components and we have enableComponent getting called in this scenario.

As to the locks on org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse we had a similar bug in https://bugs.eclipse.org/bugs/show_bug.cgi?id=544583. I doubt it got addressed by SCR in any way. Perhaps we could change that to use a ReentrantLock so we can introduce timeout? But it gets tricky to come up with an acceptable default timeout. I'm sure someone has a crazy design that does in-determinant blocking out of their ServiceFactory by design. In the end, I don't believe this to actually be a framework bug. By spec we are obligated to call the ServiceFactory while holding a lock to guarantee multiple threads do not call it in parallel.

@HannesWell
Copy link
Member Author

Does clearing out our configuration/org.eclipse.osgi framework storage area help get past this? Running with -clean does this.

Yes! After adding -clean as program-argument in the ini that Eclipse starts flawlessly. Before that the problem constantly occurred in each launch. So without that it was effectively unusable. I worked around this in the meantime by remote debugging that Eclipse with another one and blocked the SCR-theard before it could acquire the uses lock to avoid the dead-lock. But this is of course very inconvenient and not applicable for the standard Eclipse user.

Thank you Tom for the work-around.
However I suggest to fix that issue in Equinox or Felix and keep this open until then.

@laeubi
Copy link
Member

laeubi commented May 27, 2022

You can also provoke a lock if you do the following:

  1. Create a DS component in the bundle
  2. Create a ServiceTracker in the activator of that bundle that want this component service and open it
  3. You will get a lock when the bundle is started

Even though the Spec warns about that case, I would have expected that in this case the service tracker simply remains empty unless the activator has started. Maybe this would be a simpler case to debug such blocking?

I worked around this in the meantime by remote debugging that Eclipse with another one and blocked the SCR-theard before it could acquire the uses lock to avoid the dead-lock.

Do you remember where you blocked the SCR? It might then be that the locking has some dead-lock (e.g. locking in the wrong order or something), I took a quick look at the code in ServiceRegistrationImpl but it seems rather complex to take a guess by just looking at the code.

So if you can describe what are the code path to maybe provoke the lock (e.g. if Thread A is on line X and then Thread B calls Y), that would help I think.

@laeubi
Copy link
Member

laeubi commented May 27, 2022

I'm sure someone has a crazy design that does in-determinant blocking out of their ServiceFactory by design.

Looking at the stack trace I don't see anything 'crazy' at least the only non framework WorkspaceInitCustomizer so not perform any blocking at that point, just calling registerService from within a ServiceTrackerCustomizer ...

@HannesWell
Copy link
Member Author

Although I'm a maintainer of Felix SCR, I must admit that I am not that familiar with how this "SCR Component Actor" thread is used. From looking at the code it seems that it does async work for calls to org.osgi.service.component.ComponentContext.enableComponent(String) or org.osgi.service.component.runtime.ServiceComponentRuntime.enableComponent(ComponentDescriptionDTO). It would appear there is some cycle in the components and we have enableComponent getting called in this scenario.

I share the assumption that there are some DS-components that reference each other and are created in opposite order by the SCR-thread and the main thread..

As to the locks on org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse we had a similar bug in https://bugs.eclipse.org/bugs/show_bug.cgi?id=544583. I doubt it got addressed by SCR in any way. Perhaps we could change that to use a ReentrantLock so we can introduce timeout? But it gets tricky to come up with an acceptable default timeout. I'm sure someone has a crazy design that does in-determinant blocking out of their ServiceFactory by design. In the end, I don't believe this to actually be a framework bug. By spec we are obligated to call the ServiceFactory while holding a lock to guarantee multiple threads do not call it in parallel.

That bug sounds similar to the one I encountered.
What's interesting is that another Eclipse-installation on the same computer that is based on the same Eclipse milestone but with a few different plug-ins (i.e. Eclipse-for-Eclipse-committers from Oomph) did not face the problem. And after one clean-start the problem is now gone completely (I restarted it several times now). Before that it constantly appeared. So I suspect certain configurations/saved states provoke the error.

I'm also absolutely not familiar about the Felix-SCR code. But I would only add a time-out as last resort, because as you said: It is hard to find a good default that fits for everybody. And a user/downstream-consumer should not have to tweak settings to hopefully be able to successfully start the application. And if this dead-lock happens often this can also delay the application start for so long that the application at least appears to be hung up.

If I understand it correctly Equinox holds locks for each service-object under construction?
Maybe Felix can track the components under construction in a ConcurrentHashMap.keySet() and can detect cycles that lead to dead-locks? Simply spoken it adds a unique proxy of the component in a 'components-being-constructed'-set and if that proxy is already present stops the construction of the current component and all others that depend on it and discards all of them. It would then just restart from the root again. The other thread could then continue its construction and the first one will likely find some already constructed components in its second attempt.

@HannesWell
Copy link
Member Author

Thanks for that example.

I worked around this in the meantime by remote debugging that Eclipse with another one and blocked the SCR-theard before it could acquire the uses lock to avoid the dead-lock.

Do you remember where you blocked the SCR? It might then be that the locking has some dead-lock (e.g. locking in the wrong order or something), I took a quick look at the code in ServiceRegistrationImpl but it seems rather complex to take a guess by just looking at the code.

I put a break-point here:
https://github.com/eclipse-equinox/equinox.framework/blob/041df92ef3032edc14a8552aa7a2927f2e743d7c/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/serviceregistry/ServiceRegistrationImpl.java#L538

I suspect that there is one use/servicesInUse per service object in construction and if there are objects referencing each other and in case they are constructed in different order by different threads the deadlock occurs.

So if you can describe what are the code path to maybe provoke the lock (e.g. if Thread A is on line X and then Thread B calls Y), that would help I think.

Stupidly I immediately cleaned the Eclipse installation and didn't copy it before to reproduce the issue later, so unfortunately I cannot reproduce the issue. But maybe it is possible to construct one from the description of cyclic components above.

@laeubi
Copy link
Member

laeubi commented May 27, 2022

I must confess I'm a bit curious if it is really a circular dependency. Why should it be not circular once you clear some state? Beside that Felix reports circular dependencies as far as I know, and won't start them so now you should see some components being unsatisfied...

@tjwatson
Copy link
Contributor

My guess is that the start-order triggers the issue. When doing updates the updated bundles get larger bundle IDs so they end up getting started later (p2 does an uninstall-old, install-new bundle instead of update which would reuse the old bundle id). When you do -clean we start over and the bundles are installed by p2 ordered by the symbolic name (I think).

@laeubi
Copy link
Member

laeubi commented May 27, 2022

p2 does an uninstall-old, install-new bundle instead of update

I also noticed some issues with this behavior e.g. when a bundle contains native code ... is there any reason for this behavior?

My guess is that the start-order triggers the issue.

But should the start-order not be irrelevant in case of service handling? So this is actually a framework issue and not a "user" issue?

@tjwatson
Copy link
Contributor

I also noticed some issues with this behavior e.g. when a bundle contains native code ... is there any reason for this behavior?

I imagine because of the location. From the osgi> console run lb -l to see the locations like this: reference:file:plugins/org.eclipse.swt_3.120.0.v20220525-1003.jar

But should the start-order not be irrelevant in case of service handling? So this is actually a framework issue and not a "user" issue?

I cannot tell what you mean by the first sentence ... but: The type of cycle that would cause issues is something like this:

A -> B -> (optional, dynamic, reference) -> C
C -> A

Assume each service component A, B, C come from a separate bundle and the start-order is A, B, C. Once B is started it will allow A to be satisfied. B can be satisfied without C's bundle being active yet so now A and B can be constructed and activated by SCR. Once C's bundle is activated it can now also be satisfied by A and be dynamically injected into B. On the other hand if C's bundle is started first then it comes into play as soon as possible which could trigger some crossing of paths while constructing the service instances by SCR. This is not a framework issue. I would think this is more of an SCR issue.

@laeubi
Copy link
Member

laeubi commented May 27, 2022

I cannot tell what you mean by the first sentence

I mean that, regardless of order, the framework should never "deadlock", e.g. even if there is a cycle (how?) between services?

This is not a framework issue. I would think this is more of an SCR issue.

Is it forbidden to call BundleContext#getService from an arbitrary thread? Because this seems where the deadlock occurs, so if the framework is actually busy doing other tasks, I would assume the BundleContext#getService simply blocks, but never dead-lock in any way?

@tjwatson
Copy link
Contributor

Is it forbidden to call BundleContext#getService from an arbitrary thread? Because this seems where the deadlock occurs, so if the framework is actually busy doing other tasks, I would assume the BundleContext#getService simply blocks, but never dead-lock in any way?

It is not forbidden. Only thing I can think of to "make this better" is to detect the deadlock somehow and throw a ServiceException immediately. But I don't see an obvious way to do that reliably.

@laeubi
Copy link
Member

laeubi commented May 27, 2022

But I don't see an obvious way to do that reliably.

There are too many locks involved :-\

I really wonder why we need such a complex ServiceUse to track the use-count, won't a AtomicInteger also serve the purpose?

@tjwatson
Copy link
Contributor

I really wonder why we need such a complex ServiceUse to track the use-count, won't a AtomicInteger also serve the purpose?

Not sure, but that is unrelated to the deadlock. The lock is required by the specification to ensure more than one thread does not enter ServiceFactory.getService to construct the service instance.

@laeubi
Copy link
Member

laeubi commented May 28, 2022

Not sure, but that is unrelated to the deadlock.

At least both treads compete for locking the ServiceUse :-)

The lock is required by the specification to ensure more than one thread does not enter ServiceFactory.getService to construct the service instance.

right but if @HannesWell could make it work by holding one thread with the debugger to enter the critical section, then it seems there is something wrong here in how this locking works (e.g. there is a solution and the lock is not inevitable), but I don't have a good idea yet how to circumvent this without a reproducing test-case or description why the deadlock occurs, I have poked a bit around in the Felix code but it seems there are no more locks involved and I haven't found any waits yet that explain this behavior.

@laeubi
Copy link
Member

laeubi commented May 28, 2022

Stupidly I immediately cleaned the Eclipse installation and didn't copy it before to reproduce the issue later,

Any chance you know the version of eclipse you upgraded from? As the ResourcePlugin is involved, I think it might be an update of some of the "core-ide" bundles and fear other users might run into the same issue as well on the next release, so if we can find a solution here (even if it will not make it into this release) I think it would be very helpful.

The lock is required by the specification

Just wondering, is there a TCK that check this particular requirement so we can change here without the fear of breaking things?

@HannesWell
Copy link
Member Author

Stupidly I immediately cleaned the Eclipse installation and didn't copy it before to reproduce the issue later,

Any chance you know the version of eclipse you upgraded from? As the ResourcePlugin is involved, I think it might be an update of some of the "core-ide" bundles and fear other users might run into the same issue as well on the next release, so if we can find a solution here (even if it will not make it into this release) I think it would be very helpful.

It is the Eclipse Modeling Tools Oomph Product in version latest. Since I perform the setup tasks regularly I strongly assume it was 2022-06 M2 and upgraded to M3. The catalog-update to 2022-06 M3 was made available yesterday (commit 2111114185024bba9c38177f8bd137d3670e867f in the Oomph repo).
Additionally I used the following P2Director task which installs the corresponding features:

<?xml version="1.0" encoding="UTF-8"?>
<setup.p2:P2Task
    xmi:version="2.0"
    xmlns:xmi="http://www.omg.org/XMI"
    xmlns:setup.p2="http://www.eclipse.org/oomph/setup/p2/1.0"
    label="Development Requirements">
  <requirement
      name="org.eclipse.xtext.sdk.feature.group"/>
  <requirement
      name="org.eclipse.emf.ecore.xcore.sdk.feature.group"/>
  <requirement
      name="org.eclipse.m2e.feature.feature.group"/>
  <requirement
      name="org.eclipse.m2e.pde.feature.feature.group"/>
  <requirement
      name="de.jcup.asciidoctoreditor.feature.group"/>
  <requirement
      name="m2e.chromatic.feature.feature.group"/>
  <requirement
      name="org.sonarlint.eclipse.feature.feature.group"/>
  <requirement
      name="org.eclipse.m2e.core"
      versionRange="2.0.0"/>
  <repository
      url="https://download.eclipse.org/modeling/tmf/xtext/updates/composite/marketplace/"/>
  <repository
      url="https://download.eclipse.org/technology/m2e/snapshots/latest/"/>
  <repository
      url="https://download.eclipse.org/technology/m2e/releases/latest/"/>
  <repository
      url="https://de-jcup.github.io/update-site-eclipse-asciidoctor-editor/update-site/"/>
  <repository
      url="https://repo1.maven.org/maven2/.m2e/connectors/m2eclipse-tycho/0.9.0/N/LATEST/"/>
  <repository
      url="https://sidespin.github.io/m2e-chromatic/update/"/>
  <repository
      url="https://eclipse-uc.sonarlint.org"/>
</setup.p2:P2Task>

But I use a very similar setup on my private computer at home too and there the update worked flawlessly.

@HannesWell
Copy link
Member Author

HannesWell commented May 28, 2022

But should the start-order not be irrelevant in case of service handling? So this is actually a framework issue and not a "user" issue?

I cannot tell what you mean by the first sentence ... but: The type of cycle that would cause issues is something like this:

A -> B -> (optional, dynamic, reference) -> C
C -> A

That's what I suspect as well.

As the ResourcePlugin is involved, I think it might be an update of some of the "core-ide" bundles and fear other users might run into the same issue as well on the next release, so if we can find a solution here (even if it will not make it into this release) I think it would be very helpful.

Yes that would be definitely important.

I think the part of the main-thread stack-trace that helps us here most is:

        at org.eclipse.osgi.internal.framework.BundleContextImpl.registerService(BundleContextImpl.java:1047)
        at org.eclipse.core.resources.ResourcesPlugin$WorkspaceInitCustomizer.addingService(ResourcesPlugin.java:528)
        at org.eclipse.core.resources.ResourcesPlugin$WorkspaceInitCustomizer.addingService(ResourcesPlugin.java:1)
        at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:943)
        at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:1)
        at org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256)
        at org.osgi.util.tracker.AbstractTracked.trackInitial(AbstractTracked.java:183)
        at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:321)
        at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:264)
        at org.eclipse.core.resources.ResourcesPlugin.start(ResourcesPlugin.java:499)

I think that was the part you are referring to when mentioning the Resources-Plugin?
Since I have a similar installation setup at home I will try to debug that part of the activator with it. But I don't have that much time this weekend so I don't know if I will find something soon. But I will report back as soon as possible.

@laeubi
Copy link
Member

laeubi commented May 28, 2022

I think the part of the main-thread stack-trace that helps us here most is:

don't think so :-)

I think that was the part you are referring to when mentioning the Resources-Plugin?

No I was referring to @tjwatson comment that due to an update some plugin might be started "later" and as the Resources-Plugin normally starts quite early, it might be because anything changed that the Resources-Plugin was updated by P2 and now starts a bit later... but that's just a guess.

But I use a very similar setup on my private computer at home too and there the update worked flawlessly.

I was just hoping one could reproduce this e.g. by upgrading a 2022-03 installation to 2022-09 ... but then we have to wait if we get this again somewhere and can capture some more context, given that a -clean seem to solve the issue its not that dramatic anyways but maybe annoying.

@HannesWell
Copy link
Member Author

HannesWell commented May 29, 2022

I was "lucky" and encountered the same problem today after re-running the Oomph setup of my Eclipse-for-committers version latest and VisualVM showed identical stack-traces for the two blocked threads.

I remote-debugged it and found the following service chains (in the same order as in the stack-trace):

Thread main:
1.

  • service classes:
    • org.eclipse.m2e.core.project.IMavenProjectRegistry
  • user BundleContext: org.eclipse.m2e.core_2.0.0.20220524-1238
  • service classes:
    • org.eclipse.m2e.core.embedder.MavenModelManager
  • user BundleContext: org.eclipse.m2e.core_2.0.0.20220524-1238
  • service classes:
    • org.eclipse.m2e.core.project.IProjectConfigurationManager
    • org.eclipse.m2e.core.project.IMavenProjectChangedListener
    • org.eclipse.core.resources.IResourceChangeListener
  • user BundleContext: org.eclipse.m2e.core_2.0.0.20220524-1238
  • service classes:
    • org.eclipse.m2e.core.internal.project.registry.ProjectRegistryManager
  • user BundleContext: org.eclipse.m2e.core_2.0.0.20220524-1238
  • service classes:
    • org.eclipse.m2e.core.internal.project.registry.ProjectRegistryRefreshJob
  • user BundleContext: org.eclipse.core.resources_3.17.0.v20220517-0751

Thread SCR Component Actor:

  • service classes:
    • org.eclipse.m2e.core.project.IProjectConfigurationManager
    • org.eclipse.m2e.core.project.IMavenProjectChangedListener
    • org.eclipse.core.resources.IResourceChangeListener
  • user BundleContext: org.eclipse.m2e.core_2.0.0.20220524-1238
  • service classes:
    • org.eclipse.m2e.core.project.IMavenProjectRegistry
  • user BundleContext: org.eclipse.m2e.core_2.0.0.20220524-1238
  • service classes:
    • org.eclipse.m2e.core.repository.IRepositoryRegistry
    • org.eclipse.m2e.core.project.IMavenProjectChangedListener
    • org.eclipse.m2e.core.embedder.ISettingsChangeListener
  • user BundleContext: org.eclipse.m2e.core_2.0.0.20220524-1238

Derived from the implemented services the following DS-component chains cause the dead-lock.

main: 
ProjectRegistryRefreshJob -> ProjectRegistryManager -> ProjectConfigurationManager -> MavenModelManager -> MavenProjectManager
SCR Component Actor: 
RepositoryRegistry -> MavenProjectManager -> ProjectConfigurationManager

So it is probably a combination of recent changes in the resources-plugin and m2e that revealed this issue. Lucky us m2e 2.0 did not made it into 2022-06 SimRel. So users might not be affected right away, unless it appears somewhere else too.

I will try to reproduce the problem in my m2e workspace with updating the target-platform.
If there is anything else I should check, let me know. I did not clear the workspace yet.

@HannesWell
Copy link
Member Author

The only two calls to org.apache.felix.scr.impl.ComponentRegistry.missingServicePresent(), which causes the async call of DependencyManager.invokeBindMethodLate() in the "SCR Component Actor" thread, that finally participates in the deadlock are for the following ServiceReference objects:

  • called from the "main"-thread as a consequence that ResourcesPlugin.start() is called respectively its instanceLocationTracker.open():
    {org.eclipse.m2e.core.embedder.IMaven, org.eclipse.m2e.core.embedder.IMavenConfigurationChangeListener}={service.id=163, service.bundleid=4650, service.scope=bundle, component.name=org.eclipse.m2e.core.internal.embedder.MavenImpl, component.id=63}
    with the following dependencyManager-entries:
    • DependencyManager: Component [Component: org.eclipse.m2e.core.internal.preferences.MavenConfigurationImpl (67)] reference [ConfigurationChangeListener]@2
    • DependencyManager: Component [Component: org.eclipse.m2e.core.internal.repository.RepositoryRegistry (77)] reference [maven]@2
  • called from the "SCR Component Actor"-thread:
    {org.eclipse.m2e.core.repository.IRepositoryRegistry, org.eclipse.m2e.core.project.IMavenProjectChangedListener, org.eclipse.m2e.core.embedder.ISettingsChangeListener}={service.id=422, service.bundleid=4650, service.scope=bundle, component.name=org.eclipse.m2e.core.internal.repository.RepositoryRegistry, component.id=77}
    with the following dependencyManager-entries:
    • DependencyManager: Component [Component: org.eclipse.m2e.core.internal.embedder.MavenImpl (63)] reference [settingsListeners]@2

The runable executed for the second appeal is then finally stuck in the deadlock.

What's interesting is that if I update the target-platform in my m2e-workspace at the current master to use the latest 4.24-I build (i.e. https://download.eclipse.org/eclipse/updates/4.24-I-builds/I20220529-0600/) only the first call of DependencyManager.invokeBindMethodLate() happens and it happens in the "SCR Component Actor" Thread and the deadlock does not occur.
I think that is happening after a workspace clean and I suspect that some (m2e) bundles are started earlier with my updated Eclipse installation.

Do you know where I can find out such early/auto-start configuration?

@HannesWell
Copy link
Member Author

HannesWell commented May 29, 2022

Do you know where I can find out such early/auto-start configuration?

OK it seems to be the org.eclipse.m2e.logback.configuration plugin which is auto-started when installed which happens before the ResourcesPlugin is started. In a regular Eclipse Installation ResourcesPlugin.start() is only called after the workspace selection dialog has been finished. To mimic that in a debugged Eclipse I had to put a break-point into ResourcesPlugin.start() and wait a short time before continuing.

But even then a break-point at ServiceRegistrationImpl.getService(BundleContextImpl, ServiceConsumer):538 with condition

java.util.Arrays.toString(this.clazzes).contains(".m2e.core.project.IMavenProjectRegistry")||
java.util.Arrays.toString(this.clazzes).contains(".m2e.core.project.IProjectConfigurationManager")

only stops in the main-thread.

However I think with that knowledge it should be possible to construct a test-case (actually just what Tom suggested) where the Plug-ins are started explicitly in an order that causes the dead-lock. Maybe it can be even achieved reliably by levering some CountdownLatches (or similar) in bind-methods/activators.
I can try to do that in the next days, unless somebody else is faster. :)

@laeubi
Copy link
Member

laeubi commented May 30, 2022

Many thanks @HannesWell for the analysis.

Do you know where I can find out such early/auto-start configuration?

Go to the run config of your product, then to "plugins", ther you can adjust the start-levels and if a plugin is auto-started or not.

If there is anything else I should check, let me know. I did not clear the workspace yet.

You probably should save the workspace and the eclipse install because I don't think the interesting things are stored in the workspace but in the configuration area of the product. Thus to reproduce it with another Eclipse-Launch you might need to point the config area to a copy of that as well (make sure not to clear it by accident!)

If there is anything else I should check, let me know. I did not clear the workspace yet.

For me it would be interesting if you can again fix this by putting a brackpoint somewhere and if this causes any issues (e.g. warnings, failing components), if not could you try to add a dump Lock there (not a synchronized block!) that only allows a singe thread to pass that border and check if that also helps or creates a deadlock too?

@laeubi
Copy link
Member

laeubi commented May 30, 2022

But even then a break-point at ServiceRegistrationImpl.getService(BundleContextImpl, ServiceConsumer):538 with condition

I don't think that any of those are much interesting as these are "static" consumed services, you should maybe get what you expect by looking at the listener (e.g. IMavenConfigurationChangeListener) as these are consumed dynamic, that's what I tried to describe above, that if there is a "dynamic cycle" felix emits the following message:

ENTRY org.apache.felix.scr 4 0 2022-05-30 07:29:50.029
!MESSAGE bundle org.apache.felix.scr:2.1.24.v20200924-1939 (109) Circular reference detected 
 trying to get service {<service interface>}={service.id=76, service.bundleid=21, service.scope=bundle, component.name=<the component involved>, component.id=10}
 stack of references: <involved service references>

but can recover later from this when one of the components is activated, registered. So if you do not see this message, I thing it is just a "simple" dynamic reference here.

@laeubi
Copy link
Member

laeubi commented May 30, 2022

Derived from the implemented services the following DS-component chains cause the dead-lock.

Do you think you can list what service uses these currently hold?

@HannesWell
Copy link
Member Author

HannesWell commented May 30, 2022

Do you know where I can find out such early/auto-start configuration?

Go to the run config of your product, then to "plugins", ther you can adjust the start-levels and if a plugin is auto-started or not.

Sorry, I meant for an Eclipse installation. For launches that was clear to me.
Is there another file that controls the autostart settings in an installation than <installation-root>/configuration/org.eclipse.equinox.simpleconfigurator/bundles.info? (I'm pretty sure that this is the file were the settings from the wizard you mentioned are written too.)
I suspect that the Equinox container storage also holds information when bundles are 'restarted' after an application has been shutdown.

If there is anything else I should check, let me know. I did not clear the workspace yet.

You probably should save the workspace and the eclipse install because I don't think the interesting things are stored in the workspace but in the configuration area of the product. Thus to reproduce it with another Eclipse-Launch you might need to point the config area to a copy of that as well (make sure not to clear it by accident!)

Done that.

If there is anything else I should check, let me know. I did not clear the workspace yet.

For me it would be interesting if you can again fix this by putting a brackpoint somewhere and if this causes any issues (e.g. warnings, failing components), if not could you try to add a dump Lock there (not a synchronized block!) that only allows a singe thread to pass that border and check if that also helps or creates a deadlock too?

A conditional break-point at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl:538 (in method getService(BundleContextImpl, ServiceConsumer)), which uses the condition Thread.currentThread().getName().equals("SCR Component Actor"), that I disabled manually just after it was hit 'resolved' the deadlock and I did not not notice any failures/warnings/errors/pop ups (but didn't test it extensively).

Since I'm remote debugging the installation I cannot simply change that, but I will try to replicate that with ordinary java-launch configuration that copies the command parameters passed by the launcher. Then that should be possible to wrap that section of the code with a single global lock.

@HannesWell
Copy link
Member Author

But even then a break-point at ServiceRegistrationImpl.getService(BundleContextImpl, ServiceConsumer):538 with condition

I don't think that any of those are much interesting as these are "static" consumed services, you should maybe get what you expect by looking at the listener (e.g. IMavenConfigurationChangeListener) as these are consumed dynamic, that's what I tried to describe above, that if there is a "dynamic cycle" felix emits the following message:

ENTRY org.apache.felix.scr 4 0 2022-05-30 07:29:50.029
!MESSAGE bundle org.apache.felix.scr:2.1.24.v20200924-1939 (109) Circular reference detected 
 trying to get service {<service interface>}={service.id=76, service.bundleid=21, service.scope=bundle, component.name=<the component involved>, component.id=10}
 stack of references: <involved service references>

but can recover later from this when one of the components is activated, registered. So if you do not see this message, I thing it is just a "simple" dynamic reference here.

I added the -consoleLog argument and got (besides others) the following print-out. So that message is present (I'm not sure why I did not yet see it when launching from the m2e workspace, but maybe that is part of the problem).

!ENTRY org.apache.felix.scr 4 0 2022-05-30 10:58:21.455
!MESSAGE bundle org.apache.felix.scr:2.1.24.v20200924-1939 (50) Circular reference detected trying to get service {org.eclipse.m2e.core.project.IProjectConfigurationManager, org.eclipse.m2e.core.project.IMavenProjectChangedListener, org.eclipse.core.resources.IResourceChangeListener}={service.id=419, service.bundleid=4650, service.scope=bundle, event.mask=4, component.name=org.eclipse.m2e.core.internal.project.ProjectConfigurationManager, component.id=68}
 stack of references: ServiceReference: {org.eclipse.m2e.core.project.IProjectConfigurationManager, org.eclipse.m2e.core.project.IMavenProjectChangedListener, org.eclipse.core.resources.IResourceChangeListener}={service.id=419, service.bundleid=4650, service.scope=bundle, event.mask=4, component.name=org.eclipse.m2e.core.internal.project.ProjectConfigurationManager, component.id=68}
    Dependency: DependencyManager: Component [Component: org.eclipse.m2e.core.internal.project.registry.MavenProjectManager (72)] reference [MavenProjectChangedListener]
    Dependency: DependencyManager: Component [Component: org.eclipse.m2e.core.internal.project.registry.MavenProjectManager (72)] reference [MavenProjectChangedListener]
    Dependency: DependencyManager: Component [Component: org.eclipse.m2e.core.internal.project.registry.ProjectRegistryManager (74)] reference [MavenProjectChangedListener]
ServiceReference: {org.eclipse.m2e.core.embedder.MavenModelManager}={service.id=418, service.bundleid=4650, service.scope=bundle, component.name=org.eclipse.m2e.core.embedder.MavenModelManager, component.id=62}
    Dependency: DependencyManager: Component [Component: org.eclipse.m2e.core.internal.project.ProjectConfigurationManager (68)] reference [mavenModelManager]
    Dependency: DependencyManager: Component [Component: org.eclipse.m2e.core.internal.project.ProjectConfigurationManager (68)] reference [mavenModelManager]
ServiceReference: {org.eclipse.m2e.core.project.IMavenProjectRegistry}={service.id=417, service.bundleid=4650, service.scope=bundle, component.name=org.eclipse.m2e.core.internal.project.registry.MavenProjectManager, component.id=72}
    Dependency: DependencyManager: Component [Component: org.eclipse.m2e.core.internal.repository.RepositoryRegistry (77)] reference [projectManager]
    Dependency: DependencyManager: Component [Component: org.eclipse.m2e.core.embedder.MavenModelManager (62)] reference [projectManager]
    Dependency: DependencyManager: Component [Component: org.eclipse.m2e.core.embedder.MavenModelManager (62)] reference [projectManager]
    Dependency: DependencyManager: Component [Component: org.eclipse.m2e.core.internal.repository.RepositoryRegistry (77)] reference [projectManager]

!STACK 0
java.lang.Exception: stack trace
        at org.apache.felix.scr.impl.ComponentRegistry.enterCreate(ComponentRegistry.java:493)
        at org.apache.felix.scr.impl.BundleComponentActivator.enterCreate(BundleComponentActivator.java:717)
        at org.apache.felix.scr.impl.manager.SingleComponentManager.getService(SingleComponentManager.java:899)
        at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse$1.run(ServiceFactoryUse.java:220)
        at java.base/java.security.AccessController.doPrivileged(Native Method)
        at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.factoryGetService(ServiceFactoryUse.java:217)
        at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.getService(ServiceFactoryUse.java:118)
        at org.eclipse.osgi.internal.serviceregistry.ServiceConsumer$2.getService(ServiceConsumer.java:48)
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.getService(ServiceRegistrationImpl.java:547)
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.getService(ServiceRegistry.java:534)
        at org.eclipse.osgi.internal.framework.BundleContextImpl.getService(BundleContextImpl.java:660)
        at org.apache.felix.scr.impl.manager.SingleRefPair.getServiceObject(SingleRefPair.java:88)
        at org.apache.felix.scr.impl.inject.methods.BindMethod.getServiceObject(BindMethod.java:675)
        at org.apache.felix.scr.impl.manager.DependencyManager.getServiceObject(DependencyManager.java:2545)
        at org.apache.felix.scr.impl.manager.DependencyManager$MultipleDynamicCustomizer.prebind(DependencyManager.java:431)
        at org.apache.felix.scr.impl.manager.DependencyManager.prebind(DependencyManager.java:1822)
        at org.apache.felix.scr.impl.manager.AbstractComponentManager.collectDependencies(AbstractComponentManager.java:1057)
        at org.apache.felix.scr.impl.manager.SingleComponentManager.getServiceInternal(SingleComponentManager.java:953)
        at org.apache.felix.scr.impl.manager.SingleComponentManager.getService(SingleComponentManager.java:918)
        at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse$1.run(ServiceFactoryUse.java:220)
        at java.base/java.security.AccessController.doPrivileged(Native Method)
        at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.factoryGetService(ServiceFactoryUse.java:217)
        at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.getService(ServiceFactoryUse.java:118)
        at org.eclipse.osgi.internal.serviceregistry.ServiceConsumer$2.getService(ServiceConsumer.java:48)
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.getService(ServiceRegistrationImpl.java:547)
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.getService(ServiceRegistry.java:534)
        at org.eclipse.osgi.internal.framework.BundleContextImpl.getService(BundleContextImpl.java:660)
        at org.apache.felix.scr.impl.manager.SingleRefPair.getServiceObject(SingleRefPair.java:88)
        at org.apache.felix.scr.impl.inject.field.FieldHandler$ReferenceMethodImpl.getServiceObject(FieldHandler.java:525)
        at org.apache.felix.scr.impl.manager.DependencyManager.getServiceObject(DependencyManager.java:2545)
        at org.apache.felix.scr.impl.manager.DependencyManager$SingleStaticCustomizer.prebind(DependencyManager.java:1392)
        at org.apache.felix.scr.impl.manager.DependencyManager.prebind(DependencyManager.java:1822)
        at org.apache.felix.scr.impl.manager.AbstractComponentManager.collectDependencies(AbstractComponentManager.java:1057)
        at org.apache.felix.scr.impl.manager.SingleComponentManager.getServiceInternal(SingleComponentManager.java:953)
        at org.apache.felix.scr.impl.manager.SingleComponentManager.getService(SingleComponentManager.java:918)
        at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse$1.run(ServiceFactoryUse.java:220)
        at java.base/java.security.AccessController.doPrivileged(Native Method)
        at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.factoryGetService(ServiceFactoryUse.java:217)
        at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.getService(ServiceFactoryUse.java:118)
        at org.eclipse.osgi.internal.serviceregistry.ServiceConsumer$2.getService(ServiceConsumer.java:48)
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.getService(ServiceRegistrationImpl.java:547)
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.getService(ServiceRegistry.java:534)
        at org.eclipse.osgi.internal.framework.BundleContextImpl.getService(BundleContextImpl.java:660)
        at org.apache.felix.scr.impl.manager.SingleRefPair.getServiceObject(SingleRefPair.java:88)
        at org.apache.felix.scr.impl.inject.field.FieldHandler$ReferenceMethodImpl.getServiceObject(FieldHandler.java:525)
        at org.apache.felix.scr.impl.manager.DependencyManager.getServiceObject(DependencyManager.java:2545)
        at org.apache.felix.scr.impl.manager.DependencyManager$SingleStaticCustomizer.prebind(DependencyManager.java:1392)
        at org.apache.felix.scr.impl.manager.DependencyManager.prebind(DependencyManager.java:1822)
        at org.apache.felix.scr.impl.manager.AbstractComponentManager.collectDependencies(AbstractComponentManager.java:1057)
        at org.apache.felix.scr.impl.manager.SingleComponentManager.getServiceInternal(SingleComponentManager.java:953)
        at org.apache.felix.scr.impl.manager.SingleComponentManager.getService(SingleComponentManager.java:918)
        at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse$1.run(ServiceFactoryUse.java:220)
        at java.base/java.security.AccessController.doPrivileged(Native Method)
        at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.factoryGetService(ServiceFactoryUse.java:217)
        at org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.getService(ServiceFactoryUse.java:118)
        at org.eclipse.osgi.internal.serviceregistry.ServiceConsumer$2.getService(ServiceConsumer.java:48)
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.getService(ServiceRegistrationImpl.java:547)
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.getService(ServiceRegistry.java:534)
        at org.eclipse.osgi.internal.framework.BundleContextImpl.getService(BundleContextImpl.java:660)
        at org.apache.felix.scr.impl.manager.SingleRefPair.getServiceObject(SingleRefPair.java:88)
        at org.apache.felix.scr.impl.inject.methods.BindMethod.getServiceObject(BindMethod.java:675)
        at org.apache.felix.scr.impl.manager.DependencyManager.getServiceObject(DependencyManager.java:2545)
        at org.apache.felix.scr.impl.manager.DependencyManager$MultipleDynamicCustomizer.prebind(DependencyManager.java:431)
        at org.apache.felix.scr.impl.manager.DependencyManager.prebind(DependencyManager.java:1822)
        at org.apache.felix.scr.impl.manager.AbstractComponentManager.collectDependencies(AbstractComponentManager.java:1057)
        at org.apache.felix.scr.impl.manager.SingleComponentManager.getServiceInternal(SingleComponentManager.java:953)
        at org.apache.felix.scr.impl.manager.AbstractComponentManager.activateInternal(AbstractComponentManager.java:785)
        at org.apache.felix.scr.impl.manager.DependencyManager$SingleStaticCustomizer.addedService(DependencyManager.java:1271)
        at org.apache.felix.scr.impl.manager.DependencyManager$SingleStaticCustomizer.addedService(DependencyManager.java:1222)
        at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.customizerAdded(ServiceTracker.java:1200)
        at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.customizerAdded(ServiceTracker.java:1121)
        at org.apache.felix.scr.impl.manager.ServiceTracker$AbstractTracked.trackAdding(ServiceTracker.java:928)
        at org.apache.felix.scr.impl.manager.ServiceTracker$AbstractTracked.track(ServiceTracker.java:864)
        at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.serviceChanged(ServiceTracker.java:1152)
        at org.apache.felix.scr.impl.BundleComponentActivator$ListenerInfo.serviceChanged(BundleComponentActivator.java:114)
        at org.eclipse.osgi.internal.serviceregistry.FilteredServiceListener.serviceChanged(FilteredServiceListener.java:123)
        at org.eclipse.osgi.internal.framework.BundleContextImpl.dispatchEvent(BundleContextImpl.java:961)
        at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:234)
        at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:151)
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEventPrivileged(ServiceRegistry.java:937)
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEvent(ServiceRegistry.java:874)
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.register(ServiceRegistrationImpl.java:141)
        at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.registerService(ServiceRegistry.java:262)
        at org.eclipse.osgi.internal.framework.BundleContextImpl.registerService(BundleContextImpl.java:500)
        at org.eclipse.osgi.internal.framework.BundleContextImpl.registerService(BundleContextImpl.java:519)
        at org.eclipse.osgi.internal.framework.BundleContextImpl.registerService(BundleContextImpl.java:1047)
        at org.eclipse.core.resources.ResourcesPlugin$WorkspaceInitCustomizer.addingService(ResourcesPlugin.java:528)
        at org.eclipse.core.resources.ResourcesPlugin$WorkspaceInitCustomizer.addingService(ResourcesPlugin.java:1)
        at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:943)
        at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:1)
        at org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256)
        at org.osgi.util.tracker.AbstractTracked.trackInitial(AbstractTracked.java:183)
        at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:321)
        at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:264)
        at org.eclipse.core.resources.ResourcesPlugin.start(ResourcesPlugin.java:499)
        at org.eclipse.osgi.internal.framework.BundleContextImpl$2.run(BundleContextImpl.java:818)
        at org.eclipse.osgi.internal.framework.BundleContextImpl$2.run(BundleContextImpl.java:1)
        at java.base/java.security.AccessController.doPrivileged(Native Method)
        at org.eclipse.osgi.internal.framework.BundleContextImpl.startActivator(BundleContextImpl.java:810)
        at org.eclipse.osgi.internal.framework.BundleContextImpl.start(BundleContextImpl.java:767)
        at org.eclipse.osgi.internal.framework.EquinoxBundle.startWorker0(EquinoxBundle.java:1032)
        at org.eclipse.osgi.internal.framework.EquinoxBundle$EquinoxModule.startWorker(EquinoxBundle.java:371)
        at org.eclipse.osgi.container.Module.doStart(Module.java:605)
        at org.eclipse.osgi.container.Module.start(Module.java:468)
        at org.eclipse.osgi.framework.util.SecureAction.start(SecureAction.java:513)
        at org.eclipse.osgi.internal.hooks.EclipseLazyStarter.postFindLocalClass(EclipseLazyStarter.java:117)
        at org.eclipse.osgi.internal.loader.classpath.ClasspathManager.findLocalClass(ClasspathManager.java:570)
        at org.eclipse.osgi.internal.loader.ModuleClassLoader.findLocalClass(ModuleClassLoader.java:335)
        at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:397)
        at org.eclipse.osgi.internal.loader.sources.SingleSourcePackage.loadClass(SingleSourcePackage.java:41)
        at org.eclipse.osgi.internal.loader.BundleLoader.findClass0(BundleLoader.java:496)
        at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:416)
        at org.eclipse.osgi.internal.loader.ModuleClassLoader.loadClass(ModuleClassLoader.java:168)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
        at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:153)
        at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203)
        at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:136)
        at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
        at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:402)
        at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:566)
        at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:659)
        at org.eclipse.equinox.launcher.Main.basicRun(Main.java:596)
        at org.eclipse.equinox.launcher.Main.run(Main.java:1467)
10:58:21.516 [main] DEBUG org.eclipse.m2e.core.internal.project.registry.ProjectRegistryRefreshJob - Queued refresh request: [/Dash License Tool Core/pom.xml, /Dash License Tool Maven Plugin/pom.xml, /Dash License Tool Root/pom.xml, /m2e-core/pom.xml, /m2e-core-tests/pom.xml, /m2e-maven-runtime/pom.xml, /orbit-recipes/pom.xml, /org.eclipse.m2e.apt.core/pom.xml, /org.eclipse.m2e.apt.tests/pom.xml, /org.eclipse.m2e.apt.ui/pom.xml, /org.eclipse.m2e.archetype.common/pom.xml, /org.eclipse.m2e.binaryproject/pom.xml, /org.eclipse.m2e.binaryproject.tests/pom.xml, /org.eclipse.m2e.binaryproject.ui/pom.xml, /org.eclipse.m2e.core/pom.xml, /org.eclipse.m2e.core.tests/pom.xml, /org.eclipse.m2e.core.ui/pom.xml, /org.eclipse.m2e.core.ui.tests/pom.xml, /org.eclipse.m2e.discovery/pom.xml, /org.eclipse.m2e.editor/pom.xml, /org.eclipse.m2e.editor.lemminx/pom.xml, /org.eclipse.m2e.editor.lemminx.tests/pom.xml, /org.eclipse.m2e.editor.tests/pom.xml, /org.eclipse.m2e.editor.tests-2/pom.xml, /org.eclipse.m2e.feature/pom.xml, /org.eclipse.m2e.jdt/pom.xml, /org.eclipse.m2e.jdt.tests/pom.xml, /org.eclipse.m2e.jdt.ui/pom.xml, /org.eclipse.m2e.launching/pom.xml, /org.eclipse.m2e.lemminx.feature/pom.xml, /org.eclipse.m2e.lifecyclemapping.defaults/pom.xml, /org.eclipse.m2e.logback.appender/pom.xml, /org.eclipse.m2e.logback.configuration/pom.xml, /org.eclipse.m2e.logback.feature/pom.xml, /org.eclipse.m2e.maven.runtime/pom.xml, /org.eclipse.m2e.maven.runtime.slf4j.simple/pom.xml, /org.eclipse.m2e.model.edit/pom.xml, /org.eclipse.m2e.pde.connector/pom.xml, /org.eclipse.m2e.pde.feature/pom.xml, /org.eclipse.m2e.pde.target/pom.xml, /org.eclipse.m2e.pde.ui/pom.xml, /org.eclipse.m2e.profiles.core/pom.xml, /org.eclipse.m2e.profiles.core.tests/pom.xml, /org.eclipse.m2e.profiles.ui/pom.xml, /org.eclipse.m2e.refactoring/pom.xml, /org.eclipse.m2e.repository/pom.xml, /org.eclipse.m2e.scm/pom.xml, /org.eclipse.m2e.sdk.feature/pom.xml, /org.eclipse.m2e.sourcelookup/pom.xml, /org.eclipse.m2e.sourcelookup.ui/pom.xml, /org.eclipse.m2e.tests/pom.xml, /org.eclipse.m2e.tests.common/pom.xml, /org.eclipse.simrel.build/pom.xml, /target-platform/pom.xml, /test.OSGI.ee/pom.xml]
org.eclipse.m2e.logback.configuration: Logback config file: C:\dev\workspaces\eclipse.m2e\.metadata\.plugins\org.eclipse.m2e.logback.configuration\logback.1.17.0.20220517-1739.xml
org.eclipse.m2e.logback.configuration: Initializing logback

@HannesWell
Copy link
Member Author

Derived from the implemented services the following DS-component chains cause the dead-lock.

Do you think you can list what service uses these currently hold?

Do you mean the users of the services that are blocking each other?

@laeubi
Copy link
Member

laeubi commented May 30, 2022

Is there another file that controls the autostart settings in an installation than <installation-root>/configuration/org.eclipse.equinox.simpleconfigurator/bundles.info

As always it depends ;-)

bundles.info if used by the simpleconfigurator, but there is also configuration in the configuration/config.ini

I suspect that the Equinox container storage also holds information when bundles are 'restarted' after an application has been shutdown.

You can dynamically change the start level but don't know if P2 do this.

Do you mean the users of the services that are blocking each other?

The lock-objects in your initial trace says:

"main":
waiting to lock monitor 0x00007fad34006700 (object 0x0000000092005488, a org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse),
which is held by "SCR Component Actor"
"SCR Component Actor":
waiting to lock monitor 0x00007fad34008e00 (object 0x000000009260e008, a org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse),
which is held by "main"

So the interesting question is what are those ServiceFactoryUse objects and why we get in the undesirable state that one thread locks it while another require it (and how we can prevent this).

Since I'm remote debugging the installation I cannot simply change that

It is a bit cumbersome to setup, and I have not tested it but actually the following should work:

  • create a new workspace
  • make a backup copy of your eclipse install, the configuration and workspace folder just in case you need to restore that later
  • create a target and add a "Installation" target type to it, choose that the folder of your eclipse install
  • create a product launch using "all target and workspace content)
  • now set the Main > Location to the workspace folder
  • now set the Configuration > Configuration to the configuration folder
  • now set the Configuration > config.ini > use an exiting config.ini

This then should allow to launch that product from within eclipse as if you launched it from commandline and debug it, if that works, you should be able to import individual plugins (e.g. m2e) of interest into the workspace to change/debug code with them, just make sure it is the version installed in the eclipse you are using so you don't get errors because of changed API.

@HannesWell
Copy link
Member Author

After detailed debugging/manual tracing to the start up of my dead-locking Eclipse I was able to create a protocol of the events that lead to that situation. With that I was able to create a test case that reproduces that situation reliably:

TLDR;
It is caused by multiple (larger) circles of optional references (i.e. cardinality=multiplebe and policy = DYNAMIC) dependencies in the same bundle. Those optional references of the cycle are lazy bound in the SCR Component Actor Thread, that starts at a different point in the cycle.

So the interesting question is what are those ServiceFactoryUse objects and why we get in the undesirable state that one thread locks it while another require it (and how we can prevent this).

Those ServiceFactoryUse are obtained in ServiceRegistrationImpl.getService() from the user BundleContext's servicesInUseMap, that uses the ServiceRegistration as key. So for the same bundle and same ServiceReference the same ServiceUse is used.

The reference locking cycle is the following:

Thread "main":
	ProjectRegistryRefreshJob 
		--[ProjectRegistryManager manager]-->
		ProjectRegistryManager 
			--[addMavenProjectChangedListener()]-->
			ProjectConfigurationManager
				--[IMaven maven]-->
				MavenImpl
					-- [List<ISettingsChangeListener> settingsListeners, cardinality = MULTIPLE, policy = DYNAMIC]-->
					RepositoryRegistry (not satisfied)
				--[MavenModelManager mavenModelManager]-->
				MavenModelManager
					--[IMavenProjectRegistry projectManager]-->
					MavenProjectManager

Thread "SCR Component Actor":
	RepositoryRegistry
		--[IMaven maven]-->
		MavenImpl (already created in main-thread)
		--[IMavenProjectRegistry projectManager]-->
		MavenProjectManager
			--[addMavenProjectChangedListener(), cardinality = MULTIPLE, policy = DYNAMIC]-->
			ProjectConfigurationManager

The problem is that the optional reference from MavenImpl to RepositoryRegistry is not satisfied initially because the latter also references (not optional) the former. That reference is satisfied as soon as MavenImpl is activated, which triggers the activation of RepositoryRegistry in the SCR thread. But RepositoryRegistry directly references MavenProjectManager, which optionally references ProjectConfigurationManager and is therefore attempted to be active. At the same time ProjectConfigurationManager is under ongoing activation in the main thread and after it starts to activate MavenModelManager the main thread also tries to activate MavenProjectManager that the SCR is activating too.

The protocol of events that lead to this situation:

ResourceChangeListenerRegistrar is activated because its IWorkspace reference is satisfies.
Subsequently its multi reference to IResourceChangeListener is collected

Thread "main":
Activation attempt: ProjectRegistryRefreshJob -> dependencies are collected
  collect reference "ProjectRegistryManager manager":
	Activation attempt: ProjectRegistryManager
	  collect reference "addMavenProjectChangedListener()":
		Activation attempt: ProjectConfigurationManager
		  collect reference "IMaven maven":
			Activation attempt: MavenImpl
			  collect reference "IMavenConfiguration mavenConfiguration":
				Activation attempt: MavenConfigurationImpl
				dependencies/references are all collected successfully (for multi-ref "addConfigurationChangeListener()" nothing is found because IMaven is not yet completly activated, but it is nevertheless satisfied)
				component is successfully activated
			  collect reference "List<ISettingsChangeListener> settingsListeners" (0..n):
				Activation attempt: RepositoryRegistry
				ACTIVATION FAILED because reference "IMaven maven" is not yet statisfied
				=> m_componentManager.registerMissingDependency is called for that referemce 
			component is successfully activated

			=> org.apache.felix.scr.impl.ComponentRegistry.missingServicePresent() is called
			for ServiceReference: "{org.eclipse.m2e.core.embedder.IMaven, org.eclipse.m2e.core.embedder.IMavenConfigurationChangeListener}={service.id=163, service.bundleid=4650, service.scope=bundle, component.name=org.eclipse.m2e.core.internal.embedder.MavenImpl, component.id=63}"
			and felix.scr.DependencyManagers:
				"DependencyManager: Component [Component: org.eclipse.m2e.core.internal.preferences.MavenConfigurationImpl (67)] reference [ConfigurationChangeListener]"
				"DependencyManager: Component [Component: org.eclipse.m2e.core.internal.repository.RepositoryRegistry (77)] reference [maven]"
			=> From now on the "SCR Component Actor" thread starts to work in parallel

		  collect reference "IMavenConfiguration mavenConfiguration":
			already activated MavenConfigurationImpl is bound
		  collect reference "IMavenMarkerManager mavenMarkerManager"
			Activation attempt: MavenMarkerManager
			  collect reference "IMavenConfiguration mavenConfiguration":
				already activated MavenConfigurationImpl is bound
			component is successfully activated
		  collect reference "MavenModelManager mavenModelManager"
			Activation attempt: MavenModelManager
			  collect reference "IMaven maven":
				already activated MavenImpl is bound
			  collect reference "IMavenProjectRegistry projectManager":
				Activation attempt: MavenProjectManager
				##### blocks ##### in ServiceRegistrationImpl.getService() because "use" is already locked by thread "SCR Component Actor" while activating MavenProjectManager


Thread "SCR Component Actor"
	calls DependencyManager.invokeBindMethodLate() for ServiceReference and component sheduled in the main thread after MavenImpl has been acticated.
	=> for DependencyManager[MavenConfigurationImpl] MavenImpl is bound to MavenConfigurationImpl via "addConfigurationChangeListener()"
	=> for DependencyManager[RepositoryRegistry] 
		calls org.apache.felix.scr.impl.ComponentRegistry.missingServicePresent()
		with ServiceReference: "{org.eclipse.m2e.core.repository.IRepositoryRegistry, org.eclipse.m2e.core.project.IMavenProjectChangedListener, org.eclipse.m2e.core.embedder.ISettingsChangeListener}={service.id=422, service.bundleid=4650, service.scope=bundle, component.name=org.eclipse.m2e.core.internal.repository.RepositoryRegistry, component.id=77}"
		and felix.scr.DependencyManagers:
			"DependencyManager: Component [Component: org.eclipse.m2e.core.internal.embedder.MavenImpl (63)] reference [settingsListeners]@2"
			=> calls "m_componentManager.notifyWaiters()" in DependencyManager
			=> calls DependencyManager.invokeBindMethodLate() for ServiceReference of MavenImpl mentioned above that was just scheduled in the same thread as prvious task. and component sheduled in the main thread after MavenImpl has been acticated.
			=> Attempts to bind RepositoryRegistry to MavenImpl via "addConfigurationChangeListener()"
				Activation attempt: RepositoryRegistry
				  collect reference "IMaven maven":
					already activated MavenImpl is bound
				  collect reference "IMavenProjectRegistry projectManager":
					Activation attempt: MavenProjectManager
					  collect reference "addMavenProjectChangedListener()" (0..n):
						Activation attempt: ProjectConfigurationManager
						##### blocks ##### in ServiceRegistrationImpl.getService() because "use" is already locked by thread "main" while activating ProjectConfigurationManager

@laeubi laeubi transferred this issue from eclipse-equinox/equinox.framework Jun 16, 2022
HannesWell added a commit to HannesWell/equinox that referenced this issue Jul 10, 2022
HannesWell added a commit to HannesWell/equinox that referenced this issue Jul 10, 2022
HannesWell pushed a commit to HannesWell/equinox that referenced this issue Jul 10, 2022
Using a reentrant lock on Service use instead of simple synchronized
blocks.

Also added quite a bit of logging to help tracing.

Fixes eclipse-equinox#15

Also-By: BJ Hargrave <hargrave@us.ibm.com>
Also-By: Hannes Wellmann <wellmann.hannes1@gmx.net>
HannesWell added a commit to HannesWell/equinox that referenced this issue Jul 10, 2022
This is required for
eclipse-equinox#15

Also-By: BJ Hargrave <hargrave@us.ibm.com>
Also-By: Alain Picard <apicard@benchmarkconsulting.com>
HannesWell pushed a commit to HannesWell/equinox that referenced this issue Jul 10, 2022
Using a reentrant lock on Service use instead of simple synchronized
blocks.

Also added quite a bit of logging to help tracing.

Fixes eclipse-equinox#15

Also-By: BJ Hargrave <hargrave@us.ibm.com>
Also-By: Hannes Wellmann <wellmann.hannes1@gmx.net>
HannesWell added a commit to HannesWell/equinox that referenced this issue Jul 14, 2022
This is required for
eclipse-equinox#15

Also-By: BJ Hargrave <hargrave@us.ibm.com>
Also-By: Alain Picard <apicard@benchmarkconsulting.com>
HannesWell pushed a commit to HannesWell/equinox that referenced this issue Jul 14, 2022
Using a reentrant lock on Service use instead of simple synchronized
blocks.

Also added quite a bit of logging to help tracing.

Fixes eclipse-equinox#15

Also-By: BJ Hargrave <hargrave@us.ibm.com>
Also-By: Hannes Wellmann <wellmann.hannes1@gmx.net>
@HannesWell HannesWell linked a pull request Jul 17, 2022 that will close this issue
adangel added a commit to adangel/m2e-code-quality that referenced this issue Sep 20, 2022
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.

3 participants