| Summary: | Deadlock on concurrent access to org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass | ||
|---|---|---|---|
| Product: | [Eclipse Project] Platform | Reporter: | Nicolas Rouquette <nicolas.f.rouquette> |
| Component: | Runtime | Assignee: | platform-runtime-inbox <platform-runtime-inbox> |
| Status: | CLOSED DUPLICATE | QA Contact: | |
| Severity: | critical | ||
| Priority: | P3 | CC: | tjwatson |
| Version: | 4.1 | ||
| Target Milestone: | --- | ||
| Hardware: | Macintosh | ||
| OS: | Mac OS X - Carbon (unsup.) | ||
| Whiteboard: | |||
|
Description
Nicolas Rouquette
This problem is similar to other classloader deadlock bugs: 300596, 229621, 212262, 227587, 121737. I tried suggestions in the runtime options doc: http://help.eclipse.org/helios/index.jsp?topic=/org.eclipse.platform.doc.isv/reference/misc/runtime-options.html First, I added the following to my eclipse.ini: -Dosgi.classloader.singleThreadLoads=true -Dosgi.classloader.lock=classname This is really not a good strategy, there are just too many demands on the class loader from different threads that it leads to Eclipse hanging during startup: eclipse.buildId=M20100909-0800 java.version=1.6.0_22 java.vendor=Apple Inc. BootLoader constants: OS=macosx, ARCH=x86_64, WS=cocoa, NL=en_US For the time being, QVTO and MoDisco seem to be running much more smoothly with this option: -Dosgi.classloader.lock=classname I think this bug can be closed as resolved (with the runtime options doc). *** This bug has been marked as a duplicate of bug 300596 *** Eclipse is hung again -- here are the two threads involved: "Worker-8" prio=5 tid=113b8f800 nid=0x18effa000 in Object.wait() [18eff6000] java.lang.Thread.State: WAITING (on object monitor) at java.lang.Object.wait(Native Method) - waiting on <11e5ea0d8> (a java.util.HashMap) at java.lang.Object.wait(Object.java:485) at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.lockClassName(ClasspathManager.java:510) - locked <11e5ea0d8> (a java.util.HashMap) at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass_LockClassName(ClasspathManager.java:458) at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:447) at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:216) at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:393) at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:469) at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:422) at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:410) at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107) at java.lang.ClassLoader.loadClass(ClassLoader.java:248) at org.eclipse.xtext.parsetree.reconstr.impl.DefaultHiddenTokenHelper.setGrammar(DefaultHiddenTokenHelper.java:49) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at com.google.inject.SingleMethodInjector$2.invoke(SingleMethodInjector.java:72) at com.google.inject.SingleMethodInjector.inject(SingleMethodInjector.java:91) at com.google.inject.MembersInjectorImpl.injectMembers(MembersInjectorImpl.java:99) at com.google.inject.ConstructorInjector.construct(ConstructorInjector.java:94) at com.google.inject.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:111) at com.google.inject.InjectorImpl$3.get(InjectorImpl.java:549) at com.google.inject.SingleFieldInjector.inject(SingleFieldInjector.java:56) at com.google.inject.MembersInjectorImpl.injectMembers(MembersInjectorImpl.java:99) at com.google.inject.ConstructorInjector.construct(ConstructorInjector.java:94) at com.google.inject.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:111) at com.google.inject.SingleFieldInjector.inject(SingleFieldInjector.java:56) at com.google.inject.MembersInjectorImpl.injectMembers(MembersInjectorImpl.java:99) at com.google.inject.ConstructorInjector.construct(ConstructorInjector.java:94) at com.google.inject.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:111) at com.google.inject.InjectorImpl$3.get(InjectorImpl.java:549) at com.google.inject.SingleFieldInjector.inject(SingleFieldInjector.java:56) at com.google.inject.MembersInjectorImpl.injectMembers(MembersInjectorImpl.java:99) at com.google.inject.ConstructorInjector.construct(ConstructorInjector.java:94) at com.google.inject.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:111) at com.google.inject.FactoryProxy.get(FactoryProxy.java:56) at com.google.inject.SingleParameterInjector.inject(SingleParameterInjector.java:42) at com.google.inject.SingleParameterInjector.getAll(SingleParameterInjector.java:66) at com.google.inject.ConstructorInjector.construct(ConstructorInjector.java:84) at com.google.inject.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:111) at com.google.inject.SingleFieldInjector.inject(SingleFieldInjector.java:56) at com.google.inject.MembersInjectorImpl.injectMembers(MembersInjectorImpl.java:99) at com.google.inject.ConstructorInjector.construct(ConstructorInjector.java:94) at com.google.inject.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:111) at com.google.inject.FactoryProxy.get(FactoryProxy.java:56) at com.google.inject.InjectorImpl$4$1.call(InjectorImpl.java:758) at com.google.inject.InjectorImpl.callInContext(InjectorImpl.java:804) at com.google.inject.InjectorImpl$4.get(InjectorImpl.java:754) at org.eclipse.xtext.resource.XtextResourceFactory.createResource(XtextResourceFactory.java:19) at org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.createResource(ResourceSetImpl.java:425) at org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.demandCreateResource(ResourceSetImpl.java:239) at org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.getResource(ResourceSetImpl.java:391) at org.eclipse.xtext.builder.builderState.ResourceDescriptionsUpdater.update(ResourceDescriptionsUpdater.java:139) at org.eclipse.xtext.builder.builderState.ResourceDescriptionsUpdater.transitiveUpdate(ResourceDescriptionsUpdater.java:82) at org.eclipse.xtext.builder.builderState.AbstractBuilderState.transitiveUpdate(AbstractBuilderState.java:158) at org.eclipse.xtext.builder.builderState.PersistableResourceDescriptionsImpl.doUpdate(PersistableResourceDescriptionsImpl.java:48) at org.eclipse.xtext.builder.builderState.PersistableResourceDescriptionsImpl.doUpdate(PersistableResourceDescriptionsImpl.java:1) at org.eclipse.xtext.builder.builderState.AbstractBuilderState.update(AbstractBuilderState.java:108) - locked <11e8b8448> (a org.eclipse.xtext.builder.builderState.PersistableResourceDescriptionsImpl) at org.eclipse.xtext.builder.impl.XtextBuilder.doBuild(XtextBuilder.java:151) at org.eclipse.xtext.builder.impl.XtextBuilder.fullBuild(XtextBuilder.java:180) at org.eclipse.xtext.builder.impl.XtextBuilder.build(XtextBuilder.java:78) at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:629) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:172) at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:282) at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:363) at org.eclipse.core.internal.resources.Project$1.run(Project.java:545) at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1975) at org.eclipse.core.internal.resources.Project.internalBuild(Project.java:524) at org.eclipse.core.internal.resources.Project.build(Project.java:123) at org.eclipse.xtext.builder.impl.BuildScheduler$BuildJob.run(BuildScheduler.java:100) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) Locked ownable synchronizers: - None "main" prio=6 tid=114801000 nid=0x7fff7057ec20 waiting for monitor entry [7fff5fbf9000] java.lang.Thread.State: BLOCKED (on object monitor) at java.lang.ClassLoader.checkCerts(ClassLoader.java:783) - waiting to lock <11e5e9ec8> (a org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader) at java.lang.ClassLoader.preDefineClass(ClassLoader.java:488) at java.lang.ClassLoader.defineClassCond(ClassLoader.java:626) at java.lang.ClassLoader.defineClass(ClassLoader.java:616) at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.defineClass(DefaultClassLoader.java:188) at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.defineClass(ClasspathManager.java:580) at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findClassImpl(ClasspathManager.java:550) at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClassImpl(ClasspathManager.java:481) at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass_LockClassName(ClasspathManager.java:460) at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:447) at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:216) at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:393) at org.eclipse.osgi.internal.loader.SingleSourcePackage.loadClass(SingleSourcePackage.java:33) at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:466) at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:422) at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:410) at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107) at java.lang.ClassLoader.loadClass(ClassLoader.java:248) at org.eclipse.xtext.ui.editor.templates.XtextTemplateContextTypeRegistry.registerContextTypes(XtextTemplateContextTypeRegistry.java:42) at org.eclipse.xtext.ui.editor.templates.XtextTemplateContextTypeRegistry.<init>(XtextTemplateContextTypeRegistry.java:38) at $org.eclipse.xtext.ui.editor.templates.XtextTemplateContextTypeRegistry$$FastClassByGuice$$3a543b9d.newInstance(<generated>) at com.google.inject.internal.cglib.reflect.FastConstructor.newInstance(FastConstructor.java:40) at com.google.inject.DefaultConstructionProxyFactory$1.newInstance(DefaultConstructionProxyFactory.java:60) at com.google.inject.ConstructorInjector.construct(ConstructorInjector.java:85) at com.google.inject.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:111) at com.google.inject.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:45) at com.google.inject.InjectorImpl.callInContext(InjectorImpl.java:811) at com.google.inject.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:42) at com.google.inject.Scopes$1$1.get(Scopes.java:54) - locked <167012f58> (a java.lang.Class for com.google.inject.InjectorImpl) at com.google.inject.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:48) at com.google.inject.FactoryProxy.get(FactoryProxy.java:56) at com.google.inject.SingleParameterInjector.inject(SingleParameterInjector.java:42) at com.google.inject.SingleParameterInjector.getAll(SingleParameterInjector.java:66) at com.google.inject.ConstructorInjector.construct(ConstructorInjector.java:84) at com.google.inject.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:111) at com.google.inject.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:45) at com.google.inject.InjectorImpl.callInContext(InjectorImpl.java:811) at com.google.inject.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:42) at com.google.inject.Scopes$1$1.get(Scopes.java:54) - locked <167012f58> (a java.lang.Class for com.google.inject.InjectorImpl) at com.google.inject.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:48) at com.google.inject.FactoryProxy.get(FactoryProxy.java:56) at com.google.inject.SingleParameterInjector.inject(SingleParameterInjector.java:42) at com.google.inject.SingleParameterInjector.getAll(SingleParameterInjector.java:66) at com.google.inject.ConstructorInjector.construct(ConstructorInjector.java:84) at com.google.inject.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:111) at com.google.inject.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:45) at com.google.inject.InjectorImpl.callInContext(InjectorImpl.java:811) at com.google.inject.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:42) at com.google.inject.Scopes$1$1.get(Scopes.java:54) - locked <167012f58> (a java.lang.Class for com.google.inject.InjectorImpl) at com.google.inject.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:48) at com.google.inject.FactoryProxy.get(FactoryProxy.java:56) at com.google.inject.SingleFieldInjector.inject(SingleFieldInjector.java:56) at com.google.inject.MembersInjectorImpl.injectMembers(MembersInjectorImpl.java:99) at com.google.inject.ConstructorInjector.construct(ConstructorInjector.java:94) at com.google.inject.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:111) at com.google.inject.FactoryProxy.get(FactoryProxy.java:56) at com.google.inject.SingleFieldInjector.inject(SingleFieldInjector.java:56) at com.google.inject.MembersInjectorImpl.injectMembers(MembersInjectorImpl.java:99) at com.google.inject.ConstructorInjector.construct(ConstructorInjector.java:94) at com.google.inject.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:111) at com.google.inject.FactoryProxy.get(FactoryProxy.java:56) at com.google.inject.SingleFieldInjector.inject(SingleFieldInjector.java:56) at com.google.inject.MembersInjectorImpl.injectMembers(MembersInjectorImpl.java:99) at com.google.inject.ConstructorInjector.construct(ConstructorInjector.java:94) at com.google.inject.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:111) at com.google.inject.SingleFieldInjector.inject(SingleFieldInjector.java:56) at com.google.inject.MembersInjectorImpl.injectMembers(MembersInjectorImpl.java:99) at com.google.inject.ConstructorInjector.construct(ConstructorInjector.java:94) at com.google.inject.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:111) at com.google.inject.InjectorImpl$4$1.call(InjectorImpl.java:758) at com.google.inject.InjectorImpl.callInContext(InjectorImpl.java:804) at com.google.inject.InjectorImpl$4.get(InjectorImpl.java:754) at com.google.inject.InjectorImpl.getInstance(InjectorImpl.java:793) at org.eclipse.xtext.ui.guice.AbstractGuiceAwareExecutableExtensionFactory.create(AbstractGuiceAwareExecutableExtensionFactory.java:50) at org.eclipse.core.internal.registry.ConfigurationElement.createExecutableExtension(ConfigurationElement.java:262) at org.eclipse.core.internal.registry.ConfigurationElementHandle.createExecutableExtension(ConfigurationElementHandle.java:55) at org.eclipse.ui.internal.WorkbenchPlugin.createExtension(WorkbenchPlugin.java:259) at org.eclipse.ui.internal.registry.EditorDescriptor.createEditor(EditorDescriptor.java:235) at org.eclipse.ui.internal.EditorManager.createPart(EditorManager.java:845) at org.eclipse.ui.internal.EditorReference.createPartHelper(EditorReference.java:609) at org.eclipse.ui.internal.EditorReference.createPart(EditorReference.java:465) at org.eclipse.ui.internal.WorkbenchPartReference.getPart(WorkbenchPartReference.java:595) at org.eclipse.ui.internal.PartPane.setVisible(PartPane.java:313) at org.eclipse.ui.internal.presentations.PresentablePart.setVisible(PresentablePart.java:180) at org.eclipse.ui.internal.presentations.util.PresentablePartFolder.select(PresentablePartFolder.java:270) at org.eclipse.ui.internal.presentations.util.LeftToRightTabOrder.select(LeftToRightTabOrder.java:65) at org.eclipse.ui.internal.presentations.util.TabbedStackPresentation.selectPart(TabbedStackPresentation.java:473) at org.eclipse.ui.internal.PartStack.refreshPresentationSelection(PartStack.java:1254) at org.eclipse.ui.internal.PartStack.handleDeferredEvents(PartStack.java:1222) at org.eclipse.ui.internal.LayoutPart.deferUpdates(LayoutPart.java:400) at org.eclipse.ui.internal.PartSashContainer.handleDeferredEvents(PartSashContainer.java:1409) at org.eclipse.ui.internal.LayoutPart.deferUpdates(LayoutPart.java:400) at org.eclipse.ui.internal.WorkbenchPage.handleDeferredEvents(WorkbenchPage.java:1420) at org.eclipse.ui.internal.WorkbenchPage.deferUpdates(WorkbenchPage.java:1410) at org.eclipse.ui.internal.WorkbenchPage.closeEditors(WorkbenchPage.java:1384) at org.eclipse.ui.internal.WorkbenchPage.closeEditor(WorkbenchPage.java:1439) at org.eclipse.ui.internal.EditorPane.doHide(EditorPane.java:61) at org.eclipse.ui.internal.PartStack.close(PartStack.java:541) at org.eclipse.ui.internal.EditorStack.close(EditorStack.java:206) at org.eclipse.ui.internal.PartStack$1.close(PartStack.java:120) at org.eclipse.ui.internal.presentations.util.TabbedStackPresentation$1.handleEvent(TabbedStackPresentation.java:83) at org.eclipse.ui.internal.presentations.util.AbstractTabFolder.fireEvent(AbstractTabFolder.java:269) at org.eclipse.ui.internal.presentations.util.AbstractTabFolder.fireEvent(AbstractTabFolder.java:278) at org.eclipse.ui.internal.presentations.defaultpresentation.DefaultTabFolder.access$1(DefaultTabFolder.java:1) at org.eclipse.ui.internal.presentations.defaultpresentation.DefaultTabFolder$1.closeButtonPressed(DefaultTabFolder.java:71) at org.eclipse.ui.internal.presentations.PaneFolder.notifyCloseListeners(PaneFolder.java:631) at org.eclipse.ui.internal.presentations.PaneFolder$3.close(PaneFolder.java:206) at org.eclipse.swt.custom.CTabFolder.onMouse(CTabFolder.java:1595) at org.eclipse.swt.custom.CTabFolder$1.handleEvent(CTabFolder.java:261) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) at org.eclipse.swt.widgets.Display.sendEvent(Display.java:3776) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1367) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1390) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1375) at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1187) at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3622) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3277) at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2640) at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2604) at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2438) at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:671) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:664) at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:115) at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:619) at org.eclipse.equinox.launcher.Main.basicRun(Main.java:574) at org.eclipse.equinox.launcher.Main.run(Main.java:1407) Locked ownable synchronizers: - None Any suggestions for this? This is a duplicate of bug 212262. Unfortunately the VM lock on the classloader makes using osgi.classloader.lock=classname can cause deadlock on sun based VMs unless you are using Java 7 (I know not available yet). Java 7 allows us to use parallel classloaders that avoid the VM lock on the class loader. The only option is to use the following VM options along with osgi.classloader.lock=classname option. -XX:+UnlockDiagnosticVMOptions -XX:+UnsyncloadClass I'm not sure these options are available on the Mac version of the sun/oracle based VM. *** This bug has been marked as a duplicate of bug 212262 *** |