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 202350 - deadlock when attaching recursive listener
Summary: deadlock when attaching recursive listener
Status: RESOLVED FIXED
Alias: None
Product: versioncontrol
Classification: Unclassified
Component: Mercurial (show other bugs)
Version: 7.1
Hardware: PC Linux
: P2 normal (vote)
Assignee: Tomas Stupka
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2011-09-20 11:30 UTC by Vladimir Voskresensky
Modified: 2011-09-21 08:11 UTC (History)
0 users

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-20 11:30:06 UTC
my IDE did some work in bg and I activated window => hang
  Product Version         = NetBeans IDE Dev (Build 20110920-bb06b4016af1) (#bb06b4016af1)
  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

Found one Java-level deadlock:
=============================
"Refresh-After-WindowActivated":
  waiting to lock monitor 0x00002aaafc345cc0 (object 0x00002aaacb833720, a java.util.HashMap),
  which is held by "MercurialInterceptorEventsHandlerRP"
"MercurialInterceptorEventsHandlerRP":
  waiting to lock monitor 0x00002aaafc345d68 (object 0x00002aaacd00c0f0, a org.netbeans.modules.masterfs.filebasedfs.fileobjects.FolderObj),
  which is held by "Attach listeners to all disk folders"
"Attach listeners to all disk folders":
  waiting to lock monitor 0x00002aaafc345cc0 (object 0x00002aaacb833720, a java.util.HashMap),
  which is held by "MercurialInterceptorEventsHandlerRP"

Java stack information for the threads listed above:
===================================================
"Refresh-After-WindowActivated":
        at org.netbeans.modules.mercurial.MercurialInterceptor$HgFolderEventsHandler.handleHgFolderEvent(MercurialInterceptor.java:640)
        - waiting to lock <0x00002aaacb833720> (a java.util.HashMap)
        at org.netbeans.modules.mercurial.MercurialInterceptor$HgFolderEventsHandler.access$300(MercurialInterceptor.java:567)
        at org.netbeans.modules.mercurial.MercurialInterceptor.refreshRecursively(MercurialInterceptor.java:174)
        at org.netbeans.modules.versioning.FilesystemInterceptor$DelegatingInterceptor.refreshRecursively(FilesystemInterceptor.java:656)
        at org.netbeans.modules.versioning.FilesystemInterceptor.refreshRecursively(FilesystemInterceptor.java:174)
        at org.netbeans.modules.masterfs.ProvidedExtensionsProxy.refreshRecursively(ProvidedExtensionsProxy.java:307)
        at org.netbeans.modules.masterfs.filebasedfs.fileobjects.FileObjectKeeper.init(FileObjectKeeper.java:117)
        at org.netbeans.modules.masterfs.filebasedfs.fileobjects.FolderObj.refreshImpl(FolderObj.java:533)
        at org.netbeans.modules.masterfs.filebasedfs.fileobjects.BaseFileObj.refresh(BaseFileObj.java:796)
        at org.netbeans.modules.masterfs.filebasedfs.fileobjects.FolderObj.refresh(FolderObj.java:539)
        at org.netbeans.modules.masterfs.filebasedfs.fileobjects.RefreshSlow$1.run(RefreshSlow.java:80)
        at org.netbeans.modules.masterfs.filebasedfs.utils.FileChangedManager.idleIO(FileChangedManager.java:187)
        at org.netbeans.modules.masterfs.filebasedfs.fileobjects.RefreshSlow$1.run(RefreshSlow.java:87)
        at org.openide.filesystems.FileUtil$2.run(FileUtil.java:589)
        at org.openide.filesystems.EventControl.runAtomicAction(EventControl.java:127)
        at org.openide.filesystems.FileSystem.runAtomicAction(FileSystem.java:566)
        at org.openide.filesystems.FileUtil.runAtomicAction(FileUtil.java:573)
        at org.openide.filesystems.FileUtil.runAtomicAction(FileUtil.java:593)
        at org.netbeans.modules.masterfs.filebasedfs.fileobjects.RefreshSlow.refreshFileObject(RefreshSlow.java:91)
        at org.netbeans.modules.masterfs.filebasedfs.fileobjects.FileObjectFactory.refresh(FileObjectFactory.java:533)
        at org.netbeans.modules.masterfs.filebasedfs.fileobjects.FileObjectFactory.refresh(FileObjectFactory.java:508)
        at org.netbeans.modules.masterfs.filebasedfs.fileobjects.FileObjectFactory.refreshAll(FileObjectFactory.java:440)
        at org.netbeans.modules.masterfs.filebasedfs.fileobjects.FileObjectFactory$1.run(FileObjectFactory.java:713)
        at org.netbeans.modules.masterfs.filebasedfs.FileBasedFileSystem.runAsInconsistent(FileBasedFileSystem.java:109)
        at org.netbeans.modules.masterfs.filebasedfs.fileobjects.FileObjectFactory.refresh(FileObjectFactory.java:720)
        at org.netbeans.modules.masterfs.filebasedfs.fileobjects.RootObj.invokeRefreshFor(RootObj.java:197)
        at org.netbeans.modules.masterfs.filebasedfs.fileobjects.RefreshSlow.run(RefreshSlow.java:67)
        at org.netbeans.core.ui.warmup.MenuWarmUpTask$NbWindowsAdapter.run(MenuWarmUpTask.java:298)
        at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:1424)
        at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:1973)
"MercurialInterceptorEventsHandlerRP":
        at org.netbeans.modules.masterfs.filebasedfs.fileobjects.FolderObj.getKeeper(FolderObj.java:634)
        - waiting to lock <0x00002aaacd00c0f0> (a org.netbeans.modules.masterfs.filebasedfs.fileobjects.FolderObj)
        at org.netbeans.modules.masterfs.filebasedfs.fileobjects.FileObjectKeeper.listenTo(FileObjectKeeper.java:168)
        at org.netbeans.modules.masterfs.filebasedfs.fileobjects.FileObjectKeeper.listenToAll(FileObjectKeeper.java:187)
        at org.netbeans.modules.masterfs.filebasedfs.fileobjects.FileObjectKeeper.addRecursiveListener(FileObjectKeeper.java:91)
        - locked <0x00002aaacd00c178> (a org.netbeans.modules.masterfs.filebasedfs.fileobjects.FileObjectKeeper)
        at org.netbeans.modules.masterfs.filebasedfs.fileobjects.FolderObj.addRecursiveListener(FolderObj.java:649)
        at org.openide.filesystems.DeepListener.relisten(DeepListener.java:105)
        - locked <0x00002aaaccf44548> (a org.openide.filesystems.DeepListener)
        at org.openide.filesystems.DeepListener.init(DeepListener.java:81)
        at org.openide.filesystems.FileUtil.addRecursiveListener(FileUtil.java:328)
        at org.netbeans.modules.mercurial.MercurialInterceptor$HgFolderEventsHandler.refreshHgFolderTimestamp(MercurialInterceptor.java:619)
        - locked <0x00002aaacb833720> (a java.util.HashMap)
        at org.netbeans.modules.mercurial.MercurialInterceptor$HgFolderEventsHandler.initializeFiles(MercurialInterceptor.java:738)
        at org.netbeans.modules.mercurial.MercurialInterceptor$HgFolderEventsHandler.access$1300(MercurialInterceptor.java:567)
        at org.netbeans.modules.mercurial.MercurialInterceptor$HgFolderEventsHandler$1.run(MercurialInterceptor.java:578)
        at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:1424)
        at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:1973)
"Attach listeners to all disk folders":
        at org.netbeans.modules.mercurial.MercurialInterceptor$HgFolderEventsHandler.handleHgFolderEvent(MercurialInterceptor.java:640)
        - waiting to lock <0x00002aaacb833720> (a java.util.HashMap)
        at org.netbeans.modules.mercurial.MercurialInterceptor$HgFolderEventsHandler.access$300(MercurialInterceptor.java:567)
        at org.netbeans.modules.mercurial.MercurialInterceptor.refreshRecursively(MercurialInterceptor.java:174)
        at org.netbeans.modules.versioning.FilesystemInterceptor$DelegatingInterceptor.refreshRecursively(FilesystemInterceptor.java:656)
        at org.netbeans.modules.versioning.FilesystemInterceptor.refreshRecursively(FilesystemInterceptor.java:174)
        at org.netbeans.modules.masterfs.ProvidedExtensionsProxy.refreshRecursively(ProvidedExtensionsProxy.java:307)
        at org.netbeans.modules.masterfs.filebasedfs.fileobjects.FileObjectKeeper.init(FileObjectKeeper.java:117)
        at org.netbeans.modules.masterfs.filebasedfs.fileobjects.FolderObj.getKeeper(FolderObj.java:641)
        - locked <0x00002aaacd00c0f0> (a org.netbeans.modules.masterfs.filebasedfs.fileobjects.FolderObj)
        at org.netbeans.modules.masterfs.filebasedfs.fileobjects.FileObjectKeeper.listenTo(FileObjectKeeper.java:168)
        at org.netbeans.modules.masterfs.filebasedfs.fileobjects.FileObjectKeeper.listenToAll(FileObjectKeeper.java:214)
        at org.netbeans.modules.masterfs.filebasedfs.fileobjects.FileObjectKeeper.addRecursiveListener(FileObjectKeeper.java:91)
        - locked <0x00002aaacd00c330> (a org.netbeans.modules.masterfs.filebasedfs.fileobjects.FileObjectKeeper)
        at org.netbeans.modules.masterfs.filebasedfs.fileobjects.FolderObj.addRecursiveListener(FolderObj.java:649)
        at org.openide.filesystems.DeepListener.relisten(DeepListener.java:105)
        - locked <0x00002aaaccf3e7a0> (a org.openide.filesystems.DeepListener)
        at org.openide.filesystems.DeepListener.init(DeepListener.java:81)
        at org.openide.filesystems.FileUtil.addRecursiveListener(FileUtil.java:328)
        at org.netbeans.modules.remote.support.LocalFileSystemProvider.addRecursiveListener(LocalFileSystemProvider.java:292)
        at org.netbeans.modules.remote.spi.FileSystemProvider.addRecursiveListener(FileSystemProvider.java:332)
        at org.netbeans.modules.cnd.makeproject.api.configurations.Folder.attachListeners(Folder.java:308)
        at org.netbeans.modules.cnd.makeproject.configurations.ConfigurationXMLReader$3.run(ConfigurationXMLReader.java:275)
        at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:1424)
        at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:1973)

Found 1 deadlock.
Comment 1 Ondrej Vrabec 2011-09-20 12:59:53 UTC
fixed: http://hg.netbeans.org/core-main/rev/059cb4a35efa
Comment 2 Quality Engineering 2011-09-21 08:11:52 UTC
Integrated into 'main-golden'
Changeset: http://hg.netbeans.org/main-golden/rev/059cb4a35efa
User: Ondrej Vrabec <ovrabec@netbeans.org>
Log: #202350 - deadlock when attaching recursive listener
attach/remove listeners in a separate thread