This Bugzilla instance is a read-only archive of historic NetBeans bug reports. To report a bug in NetBeans please follow the project's instructions for reporting issues.

Bug 202244 - deadlock when open file from not yet opened java project
Summary: deadlock when open file from not yet opened java project
Status: RESOLVED FIXED
Alias: None
Product: ide
Classification: Unclassified
Component: Features On Demand (show other bugs)
Version: -S1S-
Hardware: PC Linux
: P2 normal (vote)
Assignee: Jaroslav Tulach
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2011-09-16 16:10 UTC by Vladimir Voskresensky
Modified: 2011-11-01 15:11 UTC (History)
2 users (show)

See Also:
Issue Type: DEFECT
Exception Reporter:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Vladimir Voskresensky 2011-09-16 16:10:34 UTC
started IDE (with ergonomics)
Opened JavaApplication and during this time tried to open file.cc which has question mark icon:

Found one Java-level deadlock:
=============================
"Warm Up":
  waiting to lock monitor 0x000000004eb6e4e8 (object 0x00002aaaea018da8, a org.openide.util.lookup.MetaInfServicesLookup),
  which is held by "AWT-EventQueue-1"
"AWT-EventQueue-1":
  waiting to lock monitor 0x000000004d28b0a8 (object 0x00002aaab2f95350, a java.lang.Class),
  which is held by "Warm Up"

Java stack information for the threads listed above:
===================================================
"Warm Up":
        at org.openide.util.lookup.MetaInfServicesLookup.beforeLookup(MetaInfServicesLookup.java:145)
        - waiting to lock <0x00002aaaea018da8> (a org.openide.util.lookup.MetaInfServicesLookup)
        at org.openide.util.lookup.AbstractLookup.lookupItem(AbstractLookup.java:426)
        at org.openide.util.lookup.AbstractLookup.lookup(AbstractLookup.java:420)
        at org.openide.util.lookup.ProxyLookup.lookup(ProxyLookup.java:214)
        at org.netbeans.modules.masterfs.watcher.Watcher.ext(Watcher.java:92)
        at org.netbeans.modules.masterfs.watcher.Watcher.register(Watcher.java:112)
        at org.netbeans.modules.masterfs.filebasedfs.fileobjects.BaseFileObj.addFileChangeListener(BaseFileObj.java:501)
        at org.openide.filesystems.JarFileSystem.setJarFile(JarFileSystem.java:390)
        at org.openide.filesystems.JarFileSystem.<init>(JarFileSystem.java:197)
        at org.netbeans.core.startup.layers.ArchiveURLMapper.getFileSystem(ArchiveURLMapper.java:162)
        - locked <0x00002aaab2f95350> (a java.lang.Class for org.netbeans.core.startup.layers.ArchiveURLMapper)
        at org.netbeans.core.startup.layers.ArchiveURLMapper.getFileObjects(ArchiveURLMapper.java:134)
        at org.openide.filesystems.URLMapper.findFileObject(URLMapper.java:216)
        at org.netbeans.modules.java.j2seplatform.libraries.J2SELibrarySourceForBinaryQuery.getNormalizedURL(J2SELibrarySourceForBinaryQuery.java:152)
        at org.netbeans.modules.java.j2seplatform.libraries.J2SELibrarySourceForBinaryQuery.preInit(J2SELibrarySourceForBinaryQuery.java:132)
        at org.netbeans.modules.java.j2seplatform.J2SEPlatformWarmUp.preInitJ2SELibsSFBQ(J2SEPlatformWarmUp.java:62)
        at org.netbeans.modules.java.j2seplatform.J2SEPlatformWarmUp.run(J2SEPlatformWarmUp.java:56)
        at org.netbeans.core.startup.WarmUpSupport.run(WarmUpSupport.java:94)
        at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:1424)
        at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:1973)
"AWT-EventQueue-1":
        at org.openide.util.lookup.MetaInfServicesLookup$P.getInstance(MetaInfServicesLookup.java:484)
        - waiting to lock <0x00002aaab2f95350> (a java.lang.Class for org.netbeans.core.startup.layers.ArchiveURLMapper)
        at org.openide.util.lookup.AbstractLookup$R.allInstances(AbstractLookup.java:1034)
        at org.openide.util.lookup.ProxyLookup$R.computeResult(ProxyLookup.java:557)
        at org.openide.util.lookup.ProxyLookup$R.allInstances(ProxyLookup.java:497)
        at org.openide.util.lookup.ProxyLookup$R.collectFires(ProxyLookup.java:634)
        at org.openide.util.lookup.ProxyLookup$WeakResult.collectFires(ProxyLookup.java:752)
        at org.openide.util.lookup.AbstractLookup.notifyListeners(AbstractLookup.java:562)
        at org.openide.util.lookup.AbstractLookup$R.collectFires(AbstractLookup.java:1015)
        at org.openide.util.lookup.AbstractLookup$NotifyListeners.<init>(AbstractLookup.java:521)
        at org.openide.util.lookup.AbstractLookup.notifyIn(AbstractLookup.java:310)
        at org.openide.util.lookup.AbstractLookup.setPairs(AbstractLookup.java:306)
        at org.openide.util.lookup.MetaInfServicesLookup.beforeLookup(MetaInfServicesLookup.java:163)
        - locked <0x00002aaaea018da8> (a org.openide.util.lookup.MetaInfServicesLookup)
        at org.openide.util.lookup.AbstractLookup.lookupItem(AbstractLookup.java:426)
        at org.openide.util.lookup.AbstractLookup.lookup(AbstractLookup.java:420)
        at org.openide.util.lookup.ProxyLookup.lookup(ProxyLookup.java:214)
        at org.openide.windows.WindowManager.getDefault(WindowManager.java:106)
        at org.openide.windows.TopComponent.setName(TopComponent.java:951)
        at org.netbeans.modules.java.hints.analyzer.ui.AnalyzerTopComponent.<init>(AnalyzerTopComponent.java:95)
        at org.netbeans.modules.java.hints.analyzer.ui.AnalyzerTopComponent.getDefault(AnalyzerTopComponent.java:321)
        - locked <0x00002aaab61b1968> (a java.lang.Class for org.netbeans.modules.java.hints.analyzer.ui.AnalyzerTopComponent)
        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.netbeans.modules.settings.convertors.XMLSettingsSupport$SettingsRecognizer.createFromMethod(XMLSettingsSupport.java:677)
        at org.netbeans.modules.settings.convertors.XMLSettingsSupport$SettingsRecognizer.instanceCreate(XMLSettingsSupport.java:586)
        at org.netbeans.modules.settings.convertors.SerialDataConvertor$SettingsInstance.instanceCreate(SerialDataConvertor.java:424)
        at org.netbeans.core.windows.persistence.PersistenceManager.getTopComponentPersistentForID(PersistenceManager.java:571)
        at org.netbeans.core.windows.persistence.PersistenceManager.getTopComponentForID(PersistenceManager.java:681)
        at org.netbeans.core.windows.PersistenceHandler.getTopComponentForID(PersistenceHandler.java:489)
        at org.netbeans.core.windows.PersistenceHandler.topComponentRefConfigAdded(PersistenceHandler.java:894)
        - locked <0x00002aaacb1b27e0> (a org.netbeans.core.windows.PersistenceHandler)
        at org.netbeans.core.windows.persistence.ModuleChangeHandler$3.run(ModuleChangeHandler.java:457)
        at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
        at org.netbeans.core.TimableEventQueue.dispatchEvent(TimableEventQueue.java:153)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:178)
        at java.awt.Dialog$1.run(Dialog.java:1045)
        at java.awt.Dialog$3.run(Dialog.java:1097)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.awt.Dialog.show(Dialog.java:1095)
        at org.netbeans.core.windows.services.NbPresenter.superShow(NbPresenter.java:1038)
        at org.netbeans.core.windows.services.NbPresenter.doShow(NbPresenter.java:1072)
        at org.netbeans.core.windows.services.NbPresenter.run(NbPresenter.java:1060)
        at org.netbeans.core.windows.services.NbPresenter.run(NbPresenter.java:126)
        at org.openide.util.Mutex.doEventAccess(Mutex.java:1361)
        at org.openide.util.Mutex.readAccess(Mutex.java:271)
        at org.netbeans.core.windows.services.NbPresenter.show(NbPresenter.java:1045)
        at java.awt.Component.show(Component.java:1563)
        at java.awt.Component.setVisible(Component.java:1515)
        at java.awt.Window.setVisible(Window.java:841)
        at java.awt.Dialog.setVisible(Dialog.java:985)
        at org.netbeans.modules.ide.ergonomics.Utilities.featureDialog(Utilities.java:96)
        at org.netbeans.modules.ide.ergonomics.fod.FodDataObjectFactory$Cookies.delegate(FodDataObjectFactory.java:162)
        at org.netbeans.modules.ide.ergonomics.fod.FodDataObjectFactory$Cookies.open(FodDataObjectFactory.java:148)
        at org.openide.awt.ActionDefaultPerfomer.actionPerformed(ActionDefaultPerfomer.java:70)
        at org.openide.awt.ContextAction$Performer.actionPerformed(ContextAction.java:226)
        at org.openide.awt.ContextManager.actionPerformed(ContextManager.java:250)
        at org.openide.awt.ContextAction.actionPerformed(ContextAction.java:109)
        at org.openide.util.actions.ActionInvoker$1.run(ActionInvoker.java:93)
        at org.openide.util.actions.ActionInvoker.doPerformAction(ActionInvoker.java:116)
        at org.openide.util.actions.ActionInvoker.invokeAction(ActionInvoker.java:99)
        at org.openide.awt.GeneralAction$DelegateAction.actionPerformed(GeneralAction.java:219)
        at org.openide.explorer.view.TreeView$PopupSupport.mouseClicked(TreeView.java:1629)
        at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:253)
        at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:252)
        at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:252)
        at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:252)
        at java.awt.Component.processMouseEvent(Component.java:6266)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
        at java.awt.Component.processEvent(Component.java:6028)
        at java.awt.Container.processEvent(Container.java:2041)
        at java.awt.Component.dispatchEventImpl(Component.java:4630)
        at java.awt.Container.dispatchEventImpl(Container.java:2099)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4247)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
        at java.awt.Container.dispatchEventImpl(Container.java:2085)
        at java.awt.Window.dispatchEventImpl(Window.java:2475)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
        at org.netbeans.core.TimableEventQueue.dispatchEvent(TimableEventQueue.java:153)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Comment 1 Vladimir Voskresensky 2011-09-16 16:11:12 UTC
>Log Session: Friday, September 16, 2011 7:52:57 PM MSD
>System Info:
  Product Version         = NetBeans IDE Dev (Build 20110916-68e3856e5f50) (#68e3856e5f50)
  Operating System        = Linux version 2.6.18-90.el5 running on amd64
  Java; VM; Vendor        = 1.6.0_14; Java HotSpot(TM) 64-Bit Server VM 14.0-b16; Sun Microsystems Inc.
  Runtime                 = Java(TM) SE Runtime Environment 1.6.0_14-b08
  Java Home               = /usr/java/jdk1.6.0_14/jre
  System Locale; Encoding = ru_RU (nb); UTF-8
  Home Directory          = /home/vv159170
  Current Directory       = /net/ivolvo/export/devarea/trunk/cnd.modelimpl
  User Directory          = /var/tmp/clean4
  Cache Directory         = /var/tmp/clean4/var/cache
  Installation            = /net/ivolvo/export/devarea/trunk/nbbuild/netbeans/nb
                            /net/ivolvo/export/devarea/trunk/nbbuild/netbeans/ergonomics
                            /net/ivolvo/export/devarea/trunk/nbbuild/netbeans/ide
                            /net/ivolvo/export/devarea/trunk/nbbuild/netbeans/java
                            /net/ivolvo/export/devarea/trunk/nbbuild/netbeans/apisupport
                            /net/ivolvo/export/devarea/trunk/nbbuild/netbeans/websvccommon
                            /net/ivolvo/export/devarea/trunk/nbbuild/netbeans/enterprise
                            /net/ivolvo/export/devarea/trunk/nbbuild/netbeans/mobility
                            /net/ivolvo/export/devarea/trunk/nbbuild/netbeans/profiler
                            /net/ivolvo/export/devarea/trunk/nbbuild/netbeans/php
                            /net/ivolvo/export/devarea/trunk/nbbuild/netbeans/harness
                            /net/ivolvo/export/devarea/trunk/nbbuild/netbeans/cnd
                            /net/ivolvo/export/devarea/trunk/nbbuild/netbeans/dlight
                            /net/ivolvo/export/devarea/trunk/nbbuild/netbeans/groovy
                            /net/ivolvo/export/devarea/trunk/nbbuild/netbeans/extra
                            /net/ivolvo/export/devarea/trunk/nbbuild/netbeans/javacard
                            /net/ivolvo/export/devarea/trunk/nbbuild/netbeans/javafx
                            /net/ivolvo/export/devarea/trunk/nbbuild/netbeans/platform
Comment 2 Jaroslav Tulach 2011-10-25 05:44:50 UTC
org.netbeans.modules.masterfs.watcher.Watcher.register(Watcher.java:112)
org.netbeans.modules.masterfs.filebasedfs.fileobjects.BaseFileObj.addFileChangeListener(BaseFileObj.java:501)
org.openide.filesystems.JarFileSystem.setJarFile(JarFileSystem.java:390)
org.openide.filesystems.JarFileSystem.<init>(JarFileSystem.java:197)
org.netbeans.core.startup.layers.ArchiveURLMapper.getFileSystem(ArchiveURLMapper.java:162)

If ArchiveURLMapper could create the JarFileSystem without holding internal lock, the deadlock would be gone.
Comment 3 Jaroslav Tulach 2011-10-31 10:18:32 UTC
ergonomics#e999b6e938a2
Comment 4 Quality Engineering 2011-11-01 15:11:50 UTC
Integrated into 'main-golden'
Changeset: http://hg.netbeans.org/main-golden/rev/e999b6e938a2
User: Jaroslav Tulach <jtulach@netbeans.org>
Log: #202244: MetaInfServicesLookup synchronizes on ArchiveURLMapper.class which clashes with static synchronized methods. Replacing with lock on mountRoots