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 204057 - Deadlock editing C++ project while netbeans parses projects
Summary: Deadlock editing C++ project while netbeans parses projects
Status: RESOLVED FIXED
Alias: None
Product: cnd
Classification: Unclassified
Component: Code Model (show other bugs)
Version: 7.1
Hardware: PC Linux
: P2 normal (vote)
Assignee: Vladimir Voskresensky
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2011-10-21 10:42 UTC by anba
Modified: 2011-10-25 14:32 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 anba 2011-10-21 10:42:11 UTC
A Dead lock appeared while parsing editing C++ code during project parsing.

I anonymized the name of the C++-file and project.

Output from jconsole Deadlock detection:

Name: ToolTip-Evaluator
State: BLOCKED on org.netbeans.modules.cnd.modelimpl.csm.core.ModelImpl$Lock@179a185 owned by: IDE needs to set up tools collections for P1.
Total blocked: 65  Total waited: 57

Stack trace: 
 org.netbeans.modules.cnd.modelimpl.csm.core.ModelImpl.findProject(ModelImpl.java:125)
org.netbeans.modules.cnd.modelimpl.csm.core.ModelImpl.getProject(ModelImpl.java:146)
org.netbeans.modules.cnd.modelutil.CsmUtilities.getCsmFiles(CsmUtilities.java:412)
org.netbeans.modules.cnd.modelutil.CsmUtilities.getCsmFile(CsmUtilities.java:475)
org.netbeans.modules.cnd.modelutil.CsmUtilities.getCsmFile(CsmUtilities.java:332)
org.netbeans.modules.cnd.completion.cplusplus.hyperlink.CsmHyperlinkProvider.findTargetObject(CsmHyperlinkProvider.java:230)
org.netbeans.modules.cnd.completion.cplusplus.hyperlink.CsmHyperlinkProvider.getTooltipText(CsmHyperlinkProvider.java:348)
org.netbeans.modules.cnd.completion.cplusplus.hyperlink.CsmAbstractHyperlinkProvider.getTooltipText(CsmAbstractHyperlinkProvider.java:236)
org.netbeans.lib.editor.hyperlink.HyperlinkOperation$TooltipResolver.getValue(HyperlinkOperation.java:503)
org.netbeans.lib.editor.hyperlink.HyperlinkOperation$TooltipResolver.getValue(HyperlinkOperation.java:490)
org.netbeans.modules.editor.NbToolTip$Request.getTooltipFromHighlightingLayers(NbToolTip.java:437)
org.netbeans.modules.editor.NbToolTip$Request.resolveTooltipText(NbToolTip.java:425)
org.netbeans.modules.editor.NbToolTip$Request.run(NbToolTip.java:361)
org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:1424)
org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:1973)



Name: IDE needs to set up tools collections for P1.
State: BLOCKED on org.netbeans.modules.cnd.modelimpl.csm.core.LibraryManager$Lock@1fec54c owned by: Code Model Parser 3: Parsing YYY.cc
Total blocked: 80  Total waited: 25

Stack trace: 
 org.netbeans.modules.cnd.modelimpl.csm.core.LibraryManager.getOrCreateLibrary(LibraryManager.java:348)
org.netbeans.modules.cnd.modelimpl.csm.core.LibraryManager.readProjectLibraries(LibraryManager.java:438)
org.netbeans.modules.cnd.modelimpl.csm.core.ProjectImpl.<init>(ProjectImpl.java:450)
org.netbeans.modules.cnd.modelimpl.csm.core.CsmObjectFactory.createObject(CsmObjectFactory.java:306)
org.netbeans.modules.cnd.repository.support.AbstractObjectFactory.readSelfPersistent(AbstractObjectFactory.java:78)
org.netbeans.modules.cnd.modelimpl.csm.core.CsmObjectFactory.read(CsmObjectFactory.java:579)
org.netbeans.modules.cnd.repository.sfs.BufferedRWAccess.read(BufferedRWAccess.java:112)
org.netbeans.modules.cnd.repository.disk.FilesAccessStrategyImpl.read(FilesAccessStrategyImpl.java:120)
org.netbeans.modules.cnd.repository.disk.MultyFileStorage.read(MultyFileStorage.java:95)
org.netbeans.modules.cnd.repository.disk.UnitImpl.get(UnitImpl.java:119)
org.netbeans.modules.cnd.repository.disk.DiskRepositoryManager.get(DiskRepositoryManager.java:203)
org.netbeans.modules.cnd.repository.impl.DelegateRepository.get(DelegateRepository.java:82)
org.netbeans.modules.cnd.modelimpl.repository.RepositoryUtils.get(RepositoryUtils.java:130)
org.netbeans.modules.cnd.modelimpl.csm.core.ProjectBase.readInstance(ProjectBase.java:245)
org.netbeans.modules.cnd.modelimpl.csm.core.ProjectImpl.createInstance(ProjectImpl.java:88)
org.netbeans.modules.cnd.modelimpl.csm.core.ProjectImpl.createInstance(ProjectImpl.java:81)
org.netbeans.modules.cnd.modelimpl.csm.core.ModelImpl.addProject(ModelImpl.java:196)
   - locked org.netbeans.modules.cnd.modelimpl.csm.core.ModelImpl$Lock@179a185
org.netbeans.modules.cnd.modelimpl.platform.ModelSupport$3.runImpl(ModelSupport.java:362)
org.netbeans.modules.cnd.utils.NamedRunnable.run(NamedRunnable.java:62)
org.netbeans.modules.cnd.spi.toolchain.CompilerSetManagerEvents.runProjectReadiness(CompilerSetManagerEvents.java:91)
org.netbeans.modules.cnd.makeproject.api.configurations.Configurations.runOnProjectReadiness(Configurations.java:136)
org.netbeans.modules.cnd.makeproject.api.configurations.Configurations.runOnProjectReadiness(Configurations.java:118)
org.netbeans.modules.cnd.makeproject.NativeProjectProvider.runOnProjectReadiness(NativeProjectProvider.java:129)
org.netbeans.modules.cnd.modelimpl.platform.ModelSupport.addProject(ModelSupport.java:365)
org.netbeans.modules.cnd.modelimpl.platform.ModelSupport.openProjects(ModelSupport.java:235)
   - locked java.util.HashSet@143abcd
org.netbeans.modules.cnd.modelimpl.platform.ModelSupport.access$100(ModelSupport.java:103)
org.netbeans.modules.cnd.modelimpl.platform.ModelSupport$1.run(ModelSupport.java:117)
org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:1424)
org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:1973)


Name: Code Model Parser 3: Parsing YYY.cc
State: BLOCKED on org.netbeans.modules.cnd.modelimpl.csm.core.ModelImpl$Lock@179a185 owned by: IDE needs to set up tools collections for P1.
Total blocked: 30  Total waited: 22

Stack trace: 
 org.netbeans.modules.cnd.modelimpl.csm.core.ModelImpl.findProject(ModelImpl.java:125)
org.netbeans.modules.cnd.modelimpl.csm.core.ProjectBase.getLibraries(ProjectBase.java:2115)
org.netbeans.modules.cnd.modelimpl.csm.core.LibraryManager.searchInProjectRootsArtificial(LibraryManager.java:308)
org.netbeans.modules.cnd.modelimpl.csm.core.LibraryManager.resolveFileProjectOnInclude(LibraryManager.java:191)
   - locked org.netbeans.modules.cnd.modelimpl.csm.core.LibraryManager$Lock@1fec54c
org.netbeans.modules.cnd.modelimpl.parser.apt.APTProjectFileBasedWalker.include(APTProjectFileBasedWalker.java:97)
org.netbeans.modules.cnd.apt.support.APTAbstractWalker.serialIncludeImpl(APTAbstractWalker.java:278)
org.netbeans.modules.cnd.apt.support.APTAbstractWalker.includeImpl(APTAbstractWalker.java:146)
   - locked org.netbeans.modules.cnd.apt.support.PostIncludeData@a0ea4f
org.netbeans.modules.cnd.apt.support.APTAbstractWalker.onInclude(APTAbstractWalker.java:112)
org.netbeans.modules.cnd.apt.support.APTWalker.onAPT(APTWalker.java:223)
org.netbeans.modules.cnd.apt.support.APTWalker.toNextNode(APTWalker.java:329)
org.netbeans.modules.cnd.apt.support.APTWalker.nextTokenImpl(APTWalker.java:301)
org.netbeans.modules.cnd.apt.support.APTWalker.access$200(APTWalker.java:61)
org.netbeans.modules.cnd.apt.support.APTWalker$WalkerTokenStream.nextToken(APTWalker.java:103)
org.netbeans.modules.cnd.apt.support.APTWalker$WalkerTokenStream.nextToken(APTWalker.java:95)
org.netbeans.modules.cnd.antlr.TokenStreamSelector.nextToken(TokenStreamSelector.java:36)
org.netbeans.modules.cnd.apt.support.APTExpandedStream.nextToken(APTExpandedStream.java:114)
org.netbeans.modules.cnd.apt.support.APTExpandedStream.nextToken(APTExpandedStream.java:75)
org.netbeans.modules.cnd.apt.utils.APTCommentsFilter.nextToken(APTCommentsFilter.java:69)
org.netbeans.modules.cnd.apt.utils.APTCommentsFilter.nextToken(APTCommentsFilter.java:57)
org.netbeans.modules.cnd.apt.support.lang.APTBaseLanguageFilter$FilterStream.nextToken(APTBaseLanguageFilter.java:143)
org.netbeans.modules.cnd.antlr.TokenBuffer.<init>(TokenBuffer.java:67)
org.netbeans.modules.cnd.antlr.TokenBuffer.<init>(TokenBuffer.java:48)
org.netbeans.modules.cnd.antlr.LLkParser.<init>(LLkParser.java:27)
org.netbeans.modules.cnd.antlr.LLkParserNoEx.<init>(LLkParserNoEx.java:38)
org.netbeans.modules.cnd.modelimpl.parser.generated.CPPParser.<init>(CPPParser.java:454)
org.netbeans.modules.cnd.modelimpl.parser.generated.CPPParser.<init>(CPPParser.java:460)
org.netbeans.modules.cnd.modelimpl.parser.CPPParserEx.<init>(CPPParserEx.java:111)
org.netbeans.modules.cnd.modelimpl.parser.CPPParserEx.getInstance(CPPParserEx.java:126)
org.netbeans.modules.cnd.modelimpl.parser.ParserProviderImpl$Antlr2CppParser.init(ParserProviderImpl.java:110)
org.netbeans.modules.cnd.modelimpl.csm.core.FileImpl.doParse(FileImpl.java:1178)
org.netbeans.modules.cnd.modelimpl.csm.core.FileImpl._parse(FileImpl.java:830)
org.netbeans.modules.cnd.modelimpl.csm.core.FileImpl.ensureParsed(FileImpl.java:517)
   - locked org.netbeans.modules.cnd.modelimpl.csm.core.FileImpl$StateLock@d96987
org.netbeans.modules.cnd.modelimpl.csm.core.ParserThread._run(ParserThread.java:139)
org.netbeans.modules.cnd.modelimpl.csm.core.ParserThread.run(ParserThread.java:72)
org.netbeans.modules.cnd.modelimpl.csm.core.ParserThreadManager$Wrapper.run(ParserThreadManager.java:91)
org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:1424)
org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:1973)
Comment 1 Alexander Simon 2011-10-24 10:00:49 UTC
It seems ModelImpl.findProject(Object id) should not use lock.
Comment 2 Vladimir Voskresensky 2011-10-24 16:32:11 UTC
fixed
http://hg.netbeans.org/cnd-main/rev/9f80c7dd4870
Comment 3 Quality Engineering 2011-10-25 14:32:26 UTC
Integrated into 'main-golden'
Changeset: http://hg.netbeans.org/main-golden/rev/9f80c7dd4870
User: Vladimir Voskresensky <vv159170@netbeans.org>
Log: fixed #204057 - Deadlock editing C++ project while netbeans parses projects
- reuse libraries of project got out of library manager lock