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 216482 - deadlock FS.setSystemName shares lock with Repository.getDefault()
Summary: deadlock FS.setSystemName shares lock with Repository.getDefault()
Status: RESOLVED FIXED
Alias: None
Product: platform
Classification: Unclassified
Component: Filesystems (show other bugs)
Version: 7.3
Hardware: PC All
: P2 normal (vote)
Assignee: Jaroslav Tulach
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2012-08-07 11:42 UTC by Andrew Krasny
Modified: 2012-11-21 13:47 UTC (History)
1 user (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 Andrew Krasny 2012-08-07 11:42:41 UTC
Found one Java-level deadlock:
=============================
"thread2":
  waiting to lock monitor 0x0814c364 (object 0xb73ca080, a java.lang.Class),
  which is held by "main"
"main":
  waiting to lock monitor 0x0814c3c8 (object 0xe6082018, a org.openide.filesystems.XMLFileSystem),
  which is held by "thread2"

Java stack information for the threads listed above:
===================================================
"thread2":
        at org.openide.filesystems.FileSystem.setSystemName(FileSystem.java:348)
        - waiting to lock <0xb73ca080> (a java.lang.Class for org.openide.filesystems.Repository)
        at org.openide.filesystems.XMLFileSystem._setSystemName(XMLFileSystem.java:318)
        at org.openide.filesystems.XMLFileSystem.setXmlUrls(XMLFileSystem.java:345)
        - locked <0xe6082018> (a org.openide.filesystems.XMLFileSystem)
        at org.openide.filesystems.XMLFileSystem.setXmlUrls(XMLFileSystem.java:309)
        - locked <0xe6082018> (a org.openide.filesystems.XMLFileSystem)
        at org.openide.filesystems.Repository$MainFS.refreshLayers(Repository.java:194)
        at org.openide.filesystems.Repository$MainFS.<init>(Repository.java:187)
        at org.openide.filesystems.Repository.getDefault(Repository.java:362)
        at org.openide.filesystems.FileUtil.getConfigFile(FileUtil.java:2280)
        at org.netbeans.modules.openide.filesystems.RecognizeInstanceFiles$OverFiles.computeDelegates(RecognizeInstanceFiles.java:144)
        at org.netbeans.modules.openide.filesystems.RecognizeInstanceFiles$OverFiles.<init>(RecognizeInstanceFiles.java:105)
        at org.netbeans.modules.openide.filesystems.RecognizeInstanceFiles$OverFiles.<init>(RecognizeInstanceFiles.java:101)
        at org.netbeans.modules.openide.filesystems.RecognizeInstanceFiles$OverFiles.<init>(RecognizeInstanceFiles.java:97)
        at org.netbeans.modules.openide.filesystems.RecognizeInstanceFiles.create(RecognizeInstanceFiles.java:77)
        at org.openide.util.lookup.implspi.NamedServicesProvider.forPath(NamedServicesProvider.java:93)
        at org.openide.util.lookup.Lookups.forPath(Lookups.java:225)
        at org.netbeans.modules.nativeexecution.common.ConnectionServiceLookup.getServiceLookup(ConnectionServiceLookup.java:71)
        at org.netbeans.modules.nativeexecution.util.URIMatcher.isIdenticalURI(URIMatcher.java:89)
        at org.netbeans.modules.nativeexecution.common.ConnectionsInfo.setConnectionInfo(ConnectionsInfo.java:86)
        - locked <0xe5e514c0> (a java.util.HashMap)
        at org.netbeans.modules.nativeexecution.common.ConnectionsPersistance$ReadTask.run(ConnectionsPersistance.java:212)
        at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:1452)
        at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:2032)
"main":
        at org.openide.filesystems.AbstractFileSystem.getAbstractRoot(AbstractFileSystem.java:458)
        - waiting to lock <0xe6082018> (a org.openide.filesystems.XMLFileSystem)
        at org.openide.filesystems.AbstractFileSystem.getRoot(AbstractFileSystem.java:181)
        at org.openide.filesystems.MultiFileSystem.canHaveRootAttributeOnReadOnlyFS(MultiFileSystem.java:674)
        at org.openide.filesystems.MultiFileObject.update(MultiFileObject.java:212)
        at org.openide.filesystems.MultiFileObject.<init>(MultiFileObject.java:129)
        at org.openide.filesystems.MultiFileObject.<init>(MultiFileObject.java:142)
        at org.openide.filesystems.MultiFileSystem.getMultiRoot(MultiFileSystem.java:267)
        at org.openide.filesystems.MultiFileSystem.setDelegates(MultiFileSystem.java:190)
        at org.openide.filesystems.Repository$MainFS.resultChanged(Repository.java:252)
        - locked <0xb73ca080> (a java.lang.Class for org.openide.filesystems.Repository)
        at org.openide.filesystems.Repository$MainFS.refreshLayers(Repository.java:199)
        at org.openide.filesystems.Repository$MainFS.<init>(Repository.java:187)
        at org.openide.filesystems.Repository.getDefault(Repository.java:362)
        at org.openide.filesystems.FileUtil.getConfigFile(FileUtil.java:2280)
        at org.netbeans.modules.openide.filesystems.RecognizeInstanceFiles$OverFiles.computeDelegates(RecognizeInstanceFiles.java:144)
        at org.netbeans.modules.openide.filesystems.RecognizeInstanceFiles$OverFiles.<init>(RecognizeInstanceFiles.java:105)
        at org.netbeans.modules.openide.filesystems.RecognizeInstanceFiles$OverFiles.<init>(RecognizeInstanceFiles.java:101)
        at org.netbeans.modules.openide.filesystems.RecognizeInstanceFiles$OverFiles.<init>(RecognizeInstanceFiles.java:97)
        at org.netbeans.modules.openide.filesystems.RecognizeInstanceFiles.create(RecognizeInstanceFiles.java:77)
        at org.openide.util.lookup.implspi.NamedServicesProvider.forPath(NamedServicesProvider.java:93)
        at org.openide.util.lookup.Lookups.forPath(Lookups.java:225)
        at org.netbeans.modules.nativeexecution.common.ConnectionServiceLookup.getServiceLookup(ConnectionServiceLookup.java:71)
        at org.netbeans.modules.nativeexecution.common.Connector$ProgressRunnableImpl.run(Connector.java:144)
        at org.netbeans.modules.nativeexecution.common.Connector.connectImpl(Connector.java:87)
        at org.netbeans.modules.nativeexecution.common.Connector.connect(Connector.java:69)
        at org.netbeans.modules.nativeexecution.api.ConnectionManager.connect(ConnectionManager.java:177)
        at org.netbeans.modules.nativeexecution.api.ConnectionManager.<clinit>(ConnectionManager.java:72)
        at org.netbeans.modules.nativeexecution.api.ConnectionTest.testConnectionListeners(ConnectionTest.java:93)
        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.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
        at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
        at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
        at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
        at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
        at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:30)
        at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)
        at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)
        at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
        at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
        at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
        at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
        at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
        at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
        at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
        at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:30)
        at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
        at junit.framework.JUnit4TestAdapter.run(JUnit4TestAdapter.java:39)
        at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.run(JUnitTestRunner.java:518)
        at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.launch(JUnitTestRunner.java:1052)
        at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.main(JUnitTestRunner.java:906)

Found 1 deadlock.
Comment 1 Jaroslav Tulach 2012-11-15 15:36:03 UTC
ergonomics#e8ed494dadea
Comment 2 Quality Engineering 2012-11-21 13:47:44 UTC
Integrated into 'main-golden', will be available in build *201211211016* on http://bits.netbeans.org/dev/nightly/ (upload may still be in progress)
Changeset: http://hg.netbeans.org/main-golden/rev/e8ed494dadea
User: Jaroslav Tulach <jtulach@netbeans.org>
Log: #216482: deadlock FS.setSystemName shares lock with Repository.getDefault()
#216482: Cannot synchronize on Repository.class and should not deliver events under any lock