Community
Participate
Working Groups
Build Identifier: The activator classes of the cdt.core, CCorePlugin and the cdt.managedbuilder.core ManagedBuilderCorePlugin do load each other during their start handling. If one thread is using an class/type from the cdt.core plugin while another one is using a type from the cdt.managedbuilder.core, then the 2 threads end up in a dependency loop. equinox detects this for each class loaded and breaks the loop after 5 seconds. In the end I see that some simple unit tests I run are timeout due to the accumulated 5 seconds delays. And of course, the failures also break the functionality. I actually do not see this when starting up eclipse normally, only when using our test runner. The CCorePlugin.start behavior loading the managed builder was introduced with bug 313038 in order to address a delay loading problem. The ManagedBuilderCorePlugin class just needs stuff implemented in cdt.core. Reproducible: Sometimes Steps to Reproduce: I can provide the call stacks easily, however the code using cdt.core and cdt.managedbuild.core is custom for both threads. I hope the call stacks/eclipse .log file shows the problem clearly enough, if needed I can try to create a custom test. One case: the Worker-4 is activating org.eclipse.cdt.managedbuilder.core (see ManagedBuilderCorePlugin.start) the main thread is activating org.eclipse.cdt.core (see CCorePlugin.start) Full threads: Thread [Worker-4] (Suspended) owns: org.eclipse.core.internal.variables.StringVariableManager (id=50) owns: java.lang.Class<T> (com.freescale.startup.RseInitializer) (id=51) waiting for: java.lang.Object (id=49) java.lang.Object.wait(long) line: not available [native method] org.eclipse.osgi.framework.internal.core.BundleHost(org.eclipse.osgi.framework.internal.core.AbstractBundle).beginStateChange() line: 1085 org.eclipse.osgi.framework.internal.core.BundleHost(org.eclipse.osgi.framework.internal.core.AbstractBundle).start(int) line: 282 org.eclipse.osgi.framework.util.SecureAction.start(org.osgi.framework.Bundle, int) line: 417 org.eclipse.osgi.internal.loader.BundleLoader.setLazyTrigger() line: 276 org.eclipse.core.runtime.internal.adaptor.EclipseLazyStarter.postFindLocalClass(java.lang.String, java.lang.Class, org.eclipse.osgi.baseadaptor.loader.ClasspathManager) line: 106 org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(java.lang.String) line: 453 org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(java.lang.String) line: 216 org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(java.lang.String) line: 404 org.eclipse.osgi.internal.loader.SingleSourcePackage.loadClass(java.lang.String) line: 33 org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(java.lang.String, boolean, java.lang.ClassLoader) line: 477 org.eclipse.osgi.internal.loader.BundleLoader.findClass(java.lang.String, boolean) line: 433 org.eclipse.osgi.internal.loader.BundleLoader.findClass(java.lang.String) line: 421 org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(java.lang.String, boolean) line: 107 org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader(java.lang.ClassLoader).loadClass(java.lang.String) line: 248 org.eclipse.cdt.managedbuilder.internal.buildmodel.BuildStateManager.startup() line: 146 org.eclipse.cdt.managedbuilder.core.ManagedBuilderCorePlugin.start(org.osgi.framework.BundleContext) line: 108 org.eclipse.osgi.framework.internal.core.BundleContextImpl$1.run() line: 783 java.security.AccessController.doPrivileged(java.security.PrivilegedExceptionAction<T>) line: not available [native method] org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(org.osgi.framework.BundleActivator) line: 774 org.eclipse.osgi.framework.internal.core.BundleContextImpl.start() line: 755 org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(int) line: 370 org.eclipse.osgi.framework.internal.core.BundleHost(org.eclipse.osgi.framework.internal.core.AbstractBundle).start(int) line: 284 org.eclipse.osgi.framework.util.SecureAction.start(org.osgi.framework.Bundle, int) line: 417 org.eclipse.osgi.internal.loader.BundleLoader.setLazyTrigger() line: 276 org.eclipse.core.runtime.internal.adaptor.EclipseLazyStarter.postFindLocalClass(java.lang.String, java.lang.Class, org.eclipse.osgi.baseadaptor.loader.ClasspathManager) line: 106 org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(java.lang.String) line: 453 org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(java.lang.String) line: 216 org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(java.lang.String) line: 404 org.eclipse.osgi.internal.loader.SingleSourcePackage.loadClass(java.lang.String) line: 33 org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(java.lang.String, boolean, java.lang.ClassLoader) line: 477 org.eclipse.osgi.internal.loader.BundleLoader.findClass(java.lang.String, boolean) line: 433 org.eclipse.osgi.internal.loader.BundleLoader.findClass(java.lang.String) line: 421 org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(java.lang.String, boolean) line: 107 org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader(java.lang.ClassLoader).loadClass(java.lang.String) line: 248 java.lang.Class<T>.getDeclaredConstructors0(boolean) line: not available [native method] java.lang.Class<T>.privateGetDeclaredConstructors(boolean) line: 2389 java.lang.Class<T>.getConstructor0(java.lang.Class[], int) line: 2699 java.lang.Class<T>.newInstance0() line: 326 java.lang.Class<T>.newInstance() line: 308 org.eclipse.core.internal.registry.osgi.EquinoxRegistryStrategy(org.eclipse.core.internal.registry.osgi.RegistryStrategyOSGI).createExecutableExtension(org.eclipse.core.runtime.spi.RegistryContributor, java.lang.String, java.lang.String) line: 184 org.eclipse.core.internal.registry.ExtensionRegistry.createExecutableExtension(org.eclipse.core.runtime.spi.RegistryContributor, java.lang.String, java.lang.String) line: 904 org.eclipse.core.internal.registry.ConfigurationElement.createExecutableExtension(java.lang.String) line: 243 org.eclipse.core.internal.registry.ConfigurationElementHandle.createExecutableExtension(java.lang.String) line: 55 org.eclipse.core.internal.variables.StringVariableManager.loadVariableProviders() line: 252 org.eclipse.core.internal.variables.StringVariableManager.initialize() line: 210 org.eclipse.core.internal.variables.StringVariableManager.getDynamicVariable(java.lang.String) line: 452 com.freescale.cdt.debug.cw.core.CWPlugin.getRuntimePath() line: 192 com.freescale.cdt.debug.cw.core.CWPlugin.inRuntimeWorkbench() line: 175 com.freescale.cdt.debug.cw.core.CWPlugin.getCWBinPath() line: 150 com.freescale.cdt.debug.cw.core.CWPlugin.start(org.osgi.framework.BundleContext) line: 268 org.eclipse.osgi.framework.internal.core.BundleContextImpl$1.run() line: 783 java.security.AccessController.doPrivileged(java.security.PrivilegedExceptionAction<T>) line: not available [native method] org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(org.osgi.framework.BundleActivator) line: 774 org.eclipse.osgi.framework.internal.core.BundleContextImpl.start() line: 755 org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(int) line: 370 org.eclipse.osgi.framework.internal.core.BundleHost(org.eclipse.osgi.framework.internal.core.AbstractBundle).start(int) line: 284 org.eclipse.osgi.framework.util.SecureAction.start(org.osgi.framework.Bundle, int) line: 417 org.eclipse.osgi.internal.loader.BundleLoader.setLazyTrigger() line: 276 org.eclipse.core.runtime.internal.adaptor.EclipseLazyStarter.postFindLocalClass(java.lang.String, java.lang.Class, org.eclipse.osgi.baseadaptor.loader.ClasspathManager) line: 106 org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(java.lang.String) line: 453 org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(java.lang.String) line: 216 org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(java.lang.String) line: 404 org.eclipse.osgi.internal.loader.SingleSourcePackage.loadClass(java.lang.String) line: 33 org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(java.lang.String, boolean, java.lang.ClassLoader) line: 477 org.eclipse.osgi.internal.loader.BundleLoader.findClass(java.lang.String, boolean) line: 433 org.eclipse.osgi.internal.loader.BundleLoader.findClass(java.lang.String) line: 421 org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(java.lang.String, boolean) line: 107 org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader(java.lang.ClassLoader).loadClass(java.lang.String) line: 248 com.freescale.startup.RseInitializer.initRseHooks() line: 71 com.freescale.startup.StartupPlugin.start(org.osgi.framework.BundleContext) line: 54 org.eclipse.osgi.framework.internal.core.BundleContextImpl$1.run() line: 783 java.security.AccessController.doPrivileged(java.security.PrivilegedExceptionAction<T>) line: not available [native method] org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(org.osgi.framework.BundleActivator) line: 774 org.eclipse.osgi.framework.internal.core.BundleContextImpl.start() line: 755 org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(int) line: 370 org.eclipse.osgi.framework.internal.core.BundleHost(org.eclipse.osgi.framework.internal.core.AbstractBundle).start(int) line: 284 org.eclipse.osgi.framework.util.SecureAction.start(org.osgi.framework.Bundle, int) line: 417 org.eclipse.osgi.internal.loader.BundleLoader.setLazyTrigger() line: 276 org.eclipse.core.runtime.internal.adaptor.EclipseLazyStarter.postFindLocalClass(java.lang.String, java.lang.Class, org.eclipse.osgi.baseadaptor.loader.ClasspathManager) line: 106 org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(java.lang.String) line: 453 org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(java.lang.String) line: 216 org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(java.lang.String) line: 404 org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(java.lang.String, boolean, java.lang.ClassLoader) line: 480 org.eclipse.osgi.internal.loader.BundleLoader.findClass(java.lang.String, boolean) line: 433 org.eclipse.osgi.internal.loader.BundleLoader.findClass(java.lang.String) line: 421 org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(java.lang.String, boolean) line: 107 org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader(java.lang.ClassLoader).loadClass(java.lang.String) line: 248 org.eclipse.osgi.internal.loader.BundleLoader.loadClass(java.lang.String) line: 349 org.eclipse.osgi.framework.internal.core.BundleHost.loadClass(java.lang.String, boolean) line: 232 org.eclipse.osgi.framework.internal.core.BundleHost(org.eclipse.osgi.framework.internal.core.AbstractBundle).loadClass(java.lang.String) line: 1197 Thread [main] (Suspended) owns: org.eclipse.cdt.internal.core.settings.model.CProjectDescriptionManager (id=53) owns: java.lang.Class<T> (org.eclipse.cdt.internal.core.settings.model.CProjectDescriptionManager) (id=54) owns: org.eclipse.swt.widgets.RunnableLock (id=55) waiting for: java.lang.Object (id=52) java.lang.Object.wait(long) line: not available [native method] org.eclipse.osgi.framework.internal.core.BundleHost(org.eclipse.osgi.framework.internal.core.AbstractBundle).beginStateChange() line: 1085 org.eclipse.osgi.framework.internal.core.BundleHost(org.eclipse.osgi.framework.internal.core.AbstractBundle).start(int) line: 282 org.eclipse.osgi.framework.util.SecureAction.start(org.osgi.framework.Bundle, int) line: 417 org.eclipse.osgi.internal.loader.BundleLoader.setLazyTrigger() line: 276 org.eclipse.core.runtime.internal.adaptor.EclipseLazyStarter.postFindLocalClass(java.lang.String, java.lang.Class, org.eclipse.osgi.baseadaptor.loader.ClasspathManager) line: 106 org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(java.lang.String) line: 453 org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(java.lang.String) line: 216 org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(java.lang.String) line: 404 org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(java.lang.String, boolean, java.lang.ClassLoader) line: 480 org.eclipse.osgi.internal.loader.BundleLoader.findClass(java.lang.String, boolean) line: 433 org.eclipse.osgi.internal.loader.BundleLoader.findClass(java.lang.String) line: 421 org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(java.lang.String, boolean) line: 107 org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader(java.lang.ClassLoader).loadClass(java.lang.String) line: 248 java.lang.Class<T>.getDeclaredConstructors0(boolean) line: not available [native method] java.lang.Class<T>.privateGetDeclaredConstructors(boolean) line: 2389 java.lang.Class<T>.getConstructor0(java.lang.Class[], int) line: 2699 java.lang.Class<T>.newInstance0() line: 326 java.lang.Class<T>.newInstance() line: 308 org.eclipse.core.internal.registry.osgi.EquinoxRegistryStrategy(org.eclipse.core.internal.registry.osgi.RegistryStrategyOSGI).createExecutableExtension(org.eclipse.core.runtime.spi.RegistryContributor, java.lang.String, java.lang.String) line: 184 org.eclipse.core.internal.registry.ExtensionRegistry.createExecutableExtension(org.eclipse.core.runtime.spi.RegistryContributor, java.lang.String, java.lang.String) line: 904 org.eclipse.core.internal.registry.ConfigurationElement.createExecutableExtension(java.lang.String) line: 243 org.eclipse.core.internal.registry.ConfigurationElementHandle.createExecutableExtension(java.lang.String) line: 55 org.eclipse.cdt.internal.core.settings.model.CConfigurationDataProviderDescriptor.createProvider(org.eclipse.core.runtime.IExtension) line: 101 org.eclipse.cdt.internal.core.settings.model.CConfigurationDataProviderDescriptor.<init>(org.eclipse.core.runtime.IExtension) line: 55 org.eclipse.cdt.internal.core.settings.model.CProjectDescriptionManager.initProviderInfo() line: 1197 org.eclipse.cdt.internal.core.settings.model.CProjectDescriptionManager.getInstance() line: 275 org.eclipse.cdt.core.CCorePlugin.start(org.osgi.framework.BundleContext) line: 318 org.eclipse.osgi.framework.internal.core.BundleContextImpl$1.run() line: 783 java.security.AccessController.doPrivileged(java.security.PrivilegedExceptionAction<T>) line: not available [native method] org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(org.osgi.framework.BundleActivator) line: 774 org.eclipse.osgi.framework.internal.core.BundleContextImpl.start() line: 755 org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(int) line: 370 org.eclipse.osgi.framework.internal.core.BundleHost(org.eclipse.osgi.framework.internal.core.AbstractBundle).start(int) line: 284 org.eclipse.osgi.framework.util.SecureAction.start(org.osgi.framework.Bundle, int) line: 417 org.eclipse.osgi.internal.loader.BundleLoader.setLazyTrigger() line: 276 org.eclipse.core.runtime.internal.adaptor.EclipseLazyStarter.postFindLocalClass(java.lang.String, java.lang.Class, org.eclipse.osgi.baseadaptor.loader.ClasspathManager) line: 106 org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(java.lang.String) line: 453 org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(java.lang.String) line: 216 org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(java.lang.String) line: 404 org.eclipse.osgi.internal.loader.SingleSourcePackage.loadClass(java.lang.String) line: 33 org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(java.lang.String, boolean, java.lang.ClassLoader) line: 477 org.eclipse.osgi.internal.loader.BundleLoader.findClass(java.lang.String, boolean) line: 433 org.eclipse.osgi.internal.loader.BundleLoader.findClass(java.lang.String) line: 421 org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(java.lang.String, boolean) line: 107 org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader(java.lang.ClassLoader).loadClass(java.lang.String) line: 248 com.freescale.core.ide.pathMapping.StartupListeners.execute() line: not available [local variables unavailable] com.freescale.core.ide.pathMapping.StartupListeners$1.runInUIThread(org.eclipse.core.runtime.IProgressMonitor) line: not available org.eclipse.ui.progress.UIJob$1.run() line: 96 org.eclipse.swt.widgets.RunnableLock.run() line: 35 org.eclipse.ui.internal.UISynchronizer(org.eclipse.swt.widgets.Synchronizer).runAsyncMessages(boolean, boolean) line: 154 org.eclipse.swt.widgets.Display.runAsyncMessages(boolean, boolean) line: 4056 org.eclipse.swt.widgets.Display.readAndDispatch(boolean) line: 3671 org.eclipse.ui.internal.Workbench.runEventLoop(org.eclipse.jface.window.Window$IExceptionHandler, org.eclipse.swt.widgets.Display) line: 2640 org.eclipse.ui.internal.Workbench.runUI() line: 2604 org.eclipse.ui.internal.Workbench.access$4(org.eclipse.ui.internal.Workbench) line: 2438 org.eclipse.ui.internal.Workbench$7.run() line: 671 org.eclipse.core.databinding.observable.Realm.runWithDefault(org.eclipse.core.databinding.observable.Realm, java.lang.Runnable) line: 332 org.eclipse.ui.internal.Workbench.createAndRunWorkbench(org.eclipse.swt.widgets.Display, org.eclipse.ui.application.WorkbenchAdvisor) line: 664 org.eclipse.ui.PlatformUI.createAndRunWorkbench(org.eclipse.swt.widgets.Display, org.eclipse.ui.application.WorkbenchAdvisor) line: 149 org.eclipse.ui.internal.ide.application.IDEApplication.start(org.eclipse.equinox.app.IApplicationContext) line: 115 com.freescale.morpho.buildtools.unittest.TestRunner.start(org.eclipse.equinox.app.IApplicationContext) line: 217 org.eclipse.equinox.internal.app.EclipseAppHandle.run(java.lang.Object) line: 196 org.eclipse.equinox.internal.app.MainApplicationLauncher.run(java.lang.Object) line: 32 org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(java.lang.Object) line: 110 org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(java.lang.Object) line: 79 org.eclipse.core.runtime.adaptor.EclipseStarter.run(java.lang.Object) line: 369 org.eclipse.core.runtime.adaptor.EclipseStarter.run(java.lang.String[], java.lang.Runnable) line: 179 sun.reflect.NativeMethodAccessorImpl.invoke0(java.lang.reflect.Method, java.lang.Object, java.lang.Object[]) line: not available [native method] sun.reflect.NativeMethodAccessorImpl.invoke(java.lang.Object, java.lang.Object[]) line: 39 sun.reflect.DelegatingMethodAccessorImpl.invoke(java.lang.Object, java.lang.Object[]) line: 25 java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object...) line: 597 org.eclipse.equinox.launcher.Main.invokeFramework(java.lang.String[], java.net.URL[]) line: 620 org.eclipse.equinox.launcher.Main.basicRun(java.lang.String[]) line: 575 org.eclipse.equinox.launcher.Main.run(java.lang.String[]) line: 1408
Created attachment 200480 [details] eclipse .metadata/.log file during the issue