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.
Found one Java-level deadlock: ============================= "Code Model Request Processor: Following hyperlink": waiting to lock monitor 0x08147c5c (object 0x802ba9e8, a java.lang.Object), which is held by "Code Model Request Processor: Following hyperlink" "Code Model Request Processor: Following hyperlink": waiting for ownable synchronizer 0x80f9e520, (a java.util.concurrent.locks.ReentrantReadWriteLock$FairSync), which is held by "Code Model Parser 2" "Code Model Parser 2": waiting for ownable synchronizer 0x81330ba0, (a java.util.concurrent.locks.ReentrantReadWriteLock$FairSync), which is held by "Repository writer 0" "Repository writer 0": waiting to lock monitor 0x081481d4 (object 0x87f9aca0, a java.util.ArrayList), which is held by "Code Model Parser 1" "Code Model Parser 1": waiting for ownable synchronizer 0x80f9e520, (a java.util.concurrent.locks.ReentrantReadWriteLock$FairSync), which is held by "Code Model Parser 2" Java stack information for the threads listed above: =================================================== "Code Model Request Processor: Following hyperlink": at org.netbeans.modules.cnd.modelimpl.csm.core.ModelImpl.projects(ModelImpl.java:316) - waiting to lock <0x802ba9e8> (a java.lang.Object) at org.netbeans.modules.cnd.modelimpl.csm.core.ModelImpl.findFile(ModelImpl.java:436) at org.netbeans.modules.cnd.modelutil.CsmUtilities.getCsmFile(CsmUtilities.java:262) at org.netbeans.modules.cnd.modelutil.CsmUtilities.getCsmFile(CsmUtilities.java:240) at org.netbeans.modules.cnd.modelutil.CsmUtilities.getCsmFile(CsmUtilities.java:219) at org.netbeans.modules.cnd.completion.cplusplus.hyperlink.CsmIncludeHyperlinkProvider.findInclude(CsmIncludeHyperlinkProvider.java:86) at org.netbeans.modules.cnd.completion.cplusplus.hyperlink.CsmIncludeHyperlinkProvider.findTargetObject(CsmIncludeHyperlinkProvider.java:72) at org.netbeans.modules.cnd.completion.cplusplus.hyperlink.CsmIncludeHyperlinkProvider.goToInclude(CsmIncludeHyperlinkProvider.java:67) at org.netbeans.modules.cnd.completion.cplusplus.hyperlink.CsmIncludeHyperlinkProvider.performAction(CsmIncludeHyperlinkProvider.java:60) at org.netbeans.modules.cnd.completion.cplusplus.hyperlink.CsmAbstractHyperlinkProvider$1.run(CsmAbstractHyperlinkProvider.java:63) at org.netbeans.modules.cnd.modelimpl.csm.core.CodeModelRequestProcessor$1.run(CodeModelRequestProcessor.java:57) at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:499) at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:932) "Code Model Request Processor: Following hyperlink": at sun.misc.Unsafe.park(Native Method) - parking to wait for <0x80f9e520> (a java.util.concurrent.locks.ReentrantReadWriteLock$FairSync) at java.util.concurrent.locks.LockSupport.park(LockSupport.java:158) at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:712) at java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireShared(AbstractQueuedSynchronizer.java:842) at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireShared(AbstractQueuedSynchronizer.java:1162) at java.util.concurrent.locks.ReentrantReadWriteLock$ReadLock.lock(ReentrantReadWriteLock.java:594) at org.netbeans.modules.cnd.repository.impl.SoftRefHybridRepository.get(SoftRefHybridRepository.java:71) at org.netbeans.modules.cnd.modelimpl.repository.RepositoryUtils.get(RepositoryUtils.java:58) at org.netbeans.modules.cnd.modelimpl.uid.KeyBasedUID.getObject(KeyBasedUID.java:46) at org.netbeans.modules.cnd.modelimpl.uid.KeyBasedUID.getObject(KeyBasedUID.java:37) at org.netbeans.modules.cnd.modelimpl.uid.UIDCsmConverter.UIDtoProject(UIDCsmConverter.java:85) at org.netbeans.modules.cnd.modelimpl.csm.core.ModelImpl.projects(ModelImpl.java:320) - locked <0x802ba9e8> (a java.lang.Object) at org.netbeans.modules.cnd.modelimpl.csm.core.ModelImpl.findFile(ModelImpl.java:436) at org.netbeans.modules.cnd.modelutil.CsmUtilities.getCsmFile(CsmUtilities.java:262) at org.netbeans.modules.cnd.modelutil.CsmUtilities.getCsmFile(CsmUtilities.java:240) at org.netbeans.modules.cnd.modelutil.CsmUtilities.getCsmFile(CsmUtilities.java:219) at org.netbeans.modules.cnd.completion.cplusplus.hyperlink.CsmIncludeHyperlinkProvider.findInclude(CsmIncludeHyperlinkProvider.java:86) at org.netbeans.modules.cnd.completion.cplusplus.hyperlink.CsmIncludeHyperlinkProvider.findTargetObject(CsmIncludeHyperlinkProvider.java:72) at org.netbeans.modules.cnd.completion.cplusplus.hyperlink.CsmIncludeHyperlinkProvider.goToInclude(CsmIncludeHyperlinkProvider.java:67) at org.netbeans.modules.cnd.completion.cplusplus.hyperlink.CsmIncludeHyperlinkProvider.performAction(CsmIncludeHyperlinkProvider.java:60) at org.netbeans.modules.cnd.completion.cplusplus.hyperlink.CsmAbstractHyperlinkProvider$1.run(CsmAbstractHyperlinkProvider.java:63) at org.netbeans.modules.cnd.modelimpl.csm.core.CodeModelRequestProcessor$1.run(CodeModelRequestProcessor.java:57) at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:499) at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:932) "Code Model Parser 2": at sun.misc.Unsafe.park(Native Method) - parking to wait for <0x81330ba0> (a java.util.concurrent.locks.ReentrantReadWriteLock$FairSync) at java.util.concurrent.locks.LockSupport.park(LockSupport.java:158) at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:712) at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(AbstractQueuedSynchronizer.java:743) at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:1079) at java.util.concurrent.locks.ReentrantReadWriteLock$WriteLock.lock(ReentrantReadWriteLock.java:807) at org.netbeans.modules.cnd.repository.sfs.DoubleFileStorage.remove(DoubleFileStorage.java:147) at org.netbeans.modules.cnd.repository.disk.FilePerUnitDiskRepositoryImpl.remove(FilePerUnitDiskRepositoryImpl.java:108) at org.netbeans.modules.cnd.repository.disk.DiskRepositoryManager.remove(DiskRepositoryManager.java:152) at org.netbeans.modules.cnd.repository.impl.SoftRefRepository.remove(SoftRefRepository.java:119) at org.netbeans.modules.cnd.repository.impl.SoftRefHybridRepository.remove(SoftRefHybridRepository.java:87) at org.netbeans.modules.cnd.modelimpl.repository.RepositoryUtils.remove(RepositoryUtils.java:82) at org.netbeans.modules.cnd.modelimpl.repository.RepositoryUtils.remove(RepositoryUtils.java:94) at org.netbeans.modules.cnd.modelimpl.csm.core.FileImpl._clearIncludes(FileImpl.java:376) at org.netbeans.modules.cnd.modelimpl.csm.core.FileImpl._reparse(FileImpl.java:292) at org.netbeans.modules.cnd.modelimpl.csm.core.FileImpl.reparse(FileImpl.java:270) - locked <0x83ee8368> (a java.lang.Object) at org.netbeans.modules.cnd.modelimpl.csm.core.FileImpl.ensureParsed(FileImpl.java:222) - locked <0x83ee8368> (a java.lang.Object) at org.netbeans.modules.cnd.modelimpl.csm.core.ParserThread.run(ParserThread.java:66) at org.netbeans.modules.cnd.modelimpl.csm.core.ParserThreadManager$Wrapper.run(ParserThreadManager.java:60) at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:499) at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:932) "Repository writer 0": at org.netbeans.modules.cnd.modelimpl.uid.UIDObjectFactory.copySyncCollection(UIDObjectFactory.java:155) - waiting to lock <0x87f9aca0> (a java.util.ArrayList) at org.netbeans.modules.cnd.modelimpl.uid.UIDObjectFactory.writeUIDCollection(UIDObjectFactory.java:82) at org.netbeans.modules.cnd.modelimpl.csm.ClassImpl.write(ClassImpl.java:473) at org.netbeans.modules.cnd.repository.support.AbstractObjectFactory.writeSelfPersistent(AbstractObjectFactory.java:44) at org.netbeans.modules.cnd.modelimpl.csm.core.CsmObjectFactory.write(CsmObjectFactory.java:365) at org.netbeans.modules.cnd.repository.sfs.BufferedRWAccess.write(BufferedRWAccess.java:95) at org.netbeans.modules.cnd.repository.sfs.IndexedStorageFile.put(IndexedStorageFile.java:104) at org.netbeans.modules.cnd.repository.sfs.DoubleFileStorage.put(DoubleFileStorage.java:134) at org.netbeans.modules.cnd.repository.disk.FilePerUnitDiskRepositoryImpl.write(FilePerUnitDiskRepositoryImpl.java:56) at org.netbeans.modules.cnd.repository.disk.DiskRepositoryManager.write(DiskRepositoryManager.java:123) - locked <0x80f25bb0> (a java.lang.String) at org.netbeans.modules.cnd.repository.queue.RepositoryWritingThread.run(RepositoryWritingThread.java:84) at org.netbeans.modules.cnd.repository.queue.RepositoryThreadManager$Wrapper.run(RepositoryThreadManager.java:62) at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:499) at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:932) "Code Model Parser 1": at sun.misc.Unsafe.park(Native Method) - parking to wait for <0x80f9e520> (a java.util.concurrent.locks.ReentrantReadWriteLock$FairSync) at java.util.concurrent.locks.LockSupport.park(LockSupport.java:158) at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:712) at java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireShared(AbstractQueuedSynchronizer.java:842) at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireShared(AbstractQueuedSynchronizer.java:1162) at java.util.concurrent.locks.ReentrantReadWriteLock$ReadLock.lock(ReentrantReadWriteLock.java:594) at org.netbeans.modules.cnd.repository.impl.SoftRefHybridRepository.get(SoftRefHybridRepository.java:71) at org.netbeans.modules.cnd.modelimpl.repository.RepositoryUtils.get(RepositoryUtils.java:58) at org.netbeans.modules.cnd.modelimpl.uid.KeyBasedUID.getObject(KeyBasedUID.java:46) at org.netbeans.modules.cnd.modelimpl.uid.KeyBasedUID.getObject(KeyBasedUID.java:37) at org.netbeans.modules.cnd.modelimpl.uid.UIDCsmConverter.UIDtoIdentifiable(UIDCsmConverter.java:140) at org.netbeans.modules.cnd.modelimpl.uid.UIDCsmConverter.UIDsToList(UIDCsmConverter.java:130) at org.netbeans.modules.cnd.modelimpl.uid.UIDCsmConverter.UIDsToDeclarations(UIDCsmConverter.java:106) at org.netbeans.modules.cnd.modelimpl.csm.ClassImpl.getMembers(ClassImpl.java:336) - locked <0x87f9aca0> (a java.util.ArrayList) at org.netbeans.modules.cnd.modelimpl.csm.ClassImpl._clearMembers(ClassImpl.java:408) at org.netbeans.modules.cnd.modelimpl.csm.ClassImpl.dispose(ClassImpl.java:402) at org.netbeans.modules.cnd.modelimpl.csm.core.Utils.disposeAll(Utils.java:113) at org.netbeans.modules.cnd.modelimpl.csm.core.FileImpl.disposeAll(FileImpl.java:349) at org.netbeans.modules.cnd.modelimpl.csm.core.FileImpl._reparse(FileImpl.java:296) at org.netbeans.modules.cnd.modelimpl.csm.core.FileImpl.reparse(FileImpl.java:270) - locked <0x83ee8818> (a java.lang.Object) at org.netbeans.modules.cnd.modelimpl.csm.core.FileImpl.ensureParsed(FileImpl.java:222) - locked <0x83ee8818> (a java.lang.Object) at org.netbeans.modules.cnd.modelimpl.csm.core.ParserThread.run(ParserThread.java:66) at org.netbeans.modules.cnd.modelimpl.csm.core.ParserThreadManager$Wrapper.run(ParserThreadManager.java:60) at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:499) at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:932) Found 1 deadlock.
The problem is the different order of lock requesting for different requests to the repository: - remove: first, locks in code model are taken, then in the repository - write (from the queue), first, the repository is locked, then code model (from the factory). The solution is to put remove requests to the queue like it is done for put requests.
IZ# 106477: remove requetsts are queued now. So the writing thread will do both write and remove. Not more necessary keys (using single file repository and using threading ) are removed as well. [The file was modified] 1.1.2.5 repository/src/org/netbeans/modules/cnd/repository/disk/DiskRepositoryManager.java [The file was modified] 1.1.2.7.4.4 repository/src/org/netbeans/modules/cnd/repository/impl/SoftRefHybridRepository.java [The file was modified] 1.1.2.39.4.3 repository/src/org/netbeans/modules/cnd/repository/testbench/Stats.java