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.
Scenario: - Add remote host - Create Arguments project in Full Remote mode - Rename args.c file in Projects tab ==> IDE updates file after big delay
Created attachment 152170 [details] I've got a slowness report that is most likely related to this bug. Here it is.
Unfortunately this is not easy to reproduce. But today I was able to repeat; the delay was about 15-20 seconds (with the host on local network, with 0.5 ms ping). UI is usually not frozen, just the delay after I press "enter" while renaming and before IDE reflects the change is very long.
The guilty thread is most likely "LocalHistoryStore" at sun.misc.Unsafe.park(Unsafe.java) at java.util.concurrent.locks.LockSupport.park(LockSupport.java:186) at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:834) at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(AbstractQueuedSynchronizer.java:867) at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:1197) at java.util.concurrent.locks.ReentrantReadWriteLock$WriteLock.lock(ReentrantReadWriteLock.java:945) at org.netbeans.modules.remote.impl.fs.RemoteDirectory.getDirectoryStorageImpl(RemoteDirectory.java:1115) at org.netbeans.modules.remote.impl.fs.RemoteDirectory.refreshDirectoryStorage(RemoteDirectory.java:563) at org.netbeans.modules.remote.impl.fs.RemoteDirectory.refreshImpl(RemoteDirectory.java:1665) at org.netbeans.modules.remote.impl.fs.RemotePlainFile.refreshImpl(RemotePlainFile.java:450) at org.netbeans.modules.remote.impl.fs.RemoteFileObjectBase.refresh(RemoteFileObjectBase.java:561) at org.netbeans.modules.remote.impl.fs.RemoteFileObjectBase.refresh(RemoteFileObjectBase.java:576) at org.netbeans.modules.remote.impl.fs.RemoteFileObject.refresh(RemoteFileObject.java:254) at org.netbeans.modules.remotefs.versioning.spi.FileProxyProviderImpl$FileOperationsImpl.getInputStream(FileProxyProviderImpl.java:263) at org.netbeans.modules.versioning.core.api.VCSFileProxy.getInputStream(VCSFileProxy.java:361) at org.netbeans.modules.localhistory.utils.FileUtils.createInputStream(FileUtils.java:317) at org.netbeans.modules.localhistory.utils.FileUtils.copy(FileUtils.java:144) at org.netbeans.modules.localhistory.store.LocalHistoryStoreImpl.storeChangedSync(LocalHistoryStoreImpl.java:213) at org.netbeans.modules.localhistory.store.LocalHistoryStoreImpl.access$400(LocalHistoryStoreImpl.java:83) at org.netbeans.modules.localhistory.store.LocalHistoryStoreImpl$3.run(LocalHistoryStoreImpl.java:189) at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:1425) at org.netbeans.modules.openide.util.GlobalLookup.execute(GlobalLookup.java:59) at org.openide.util.lookup.Lookups.executeWith(Lookups.java:294) at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:2038)
There is a classical deadlock on (A) semaphore in LocalHistoryStoreImpl (B) RemoteDirectory WriteLock (The only reason it does not hung forever is that one of locks is aquired with 30s timeout) 1) (A) is acquired here (for old args.c file) "ViewItemNode" at org.netbeans.modules.localhistory.store.LocalHistoryStoreImpl.lock(LocalHistoryStoreImpl.java:1276) at org.netbeans.modules.localhistory.store.LocalHistoryStoreImpl.fileChange(LocalHistoryStoreImpl.java:177) at org.netbeans.modules.localhistory.LocalHistoryVCSInterceptor.beforeEdit(LocalHistoryVCSInterceptor.java:280) at org.netbeans.modules.versioning.core.filesystems.VCSFilesystemInterceptor$DelegatingInterceptor.beforeEdit(VCSFilesystemInterceptor.java:697) at org.netbeans.modules.versioning.core.filesystems.VCSFilesystemInterceptor.fileLocked(VCSFilesystemInterceptor.java:381) at org.netbeans.modules.remotefs.versioning.spi.FilesystemInterceptorProviderImpl$FilesystemInterceptorImpl.fileLocked(FilesystemInterceptorProviderImpl.java:251) at org.netbeans.modules.remote.impl.fs.RemotePlainFile.lockImpl(RemotePlainFile.java:394) at org.netbeans.modules.remote.impl.fs.RemoteFileObjectBase.lock(RemoteFileObjectBase.java:619) at org.netbeans.modules.remote.impl.fs.RemoteFileObject.lock(RemoteFileObject.java:299) at org.openide.loaders.MultiDataObject$Entry.takeLock(MultiDataObject.java:1397) at org.openide.loaders.FileEntry.rename(FileEntry.java:95) at org.openide.loaders.MultiDataObject.handleRename(MultiDataObject.java:636) at org.openide.loaders.DataObject$1Op.run(DataObject.java:821) at org.openide.loaders.DataObject$1WrapRun.run(DataObject.java:1031) at org.openide.loaders.DataObjectPool$1WrapAtomicAction.run(DataObjectPool.java:261) at org.openide.filesystems.EventControl.runAtomicAction(EventControl.java:127) at org.openide.filesystems.FileSystem.runAtomicAction(FileSystem.java:499) at org.openide.loaders.DataObjectPool.runAtomicAction(DataObjectPool.java:286) at org.openide.loaders.DataObject.invokeAtomicAction(DataObject.java:1051) at org.openide.loaders.DataObject.rename(DataObject.java:836) at org.netbeans.modules.cnd.refactoring.support.RenameHandlerImpl.handleRename(RenameHandlerImpl.java:89) at org.netbeans.modules.cnd.source.SourceDataNode.setName(SourceDataNode.java:106) at org.openide.nodes.FilterNode.setName(FilterNode.java:494) at org.netbeans.modules.cnd.makeproject.ui.ViewItemNode.access$401(ViewItemNode.java:99) at org.netbeans.modules.cnd.makeproject.ui.ViewItemNode$2.run(ViewItemNode.java:155) at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:1425) at org.netbeans.modules.openide.util.GlobalLookup.execute(GlobalLookup.java:59) at org.openide.util.lookup.Lookups.executeWith(Lookups.java:294) at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:2038) 2) Then we two threads come simultaneously: "ViewItemNode" at org.netbeans.modules.remote.impl.fs.RemoteDirectory.renameChild(RemoteDirectory.java:773) at org.netbeans.modules.remote.impl.fs.RemoteFileObjectBase.renameImpl(RemoteFileObjectBase.java:692) at org.netbeans.modules.remote.impl.fs.RemoteFileObjectBase.rename(RemoteFileObjectBase.java:655) at org.netbeans.modules.remote.impl.fs.RemoteFileObject.rename(RemoteFileObject.java:239) at org.openide.loaders.FileEntry.rename(FileEntry.java:97) at org.openide.loaders.MultiDataObject.handleRename(MultiDataObject.java:636) at org.openide.loaders.DataObject$1Op.run(DataObject.java:821) at org.openide.loaders.DataObject$1WrapRun.run(DataObject.java:1031) at org.openide.loaders.DataObjectPool$1WrapAtomicAction.run(DataObjectPool.java:261) at org.openide.filesystems.EventControl.runAtomicAction(EventControl.java:127) at org.openide.filesystems.FileSystem.runAtomicAction(FileSystem.java:499) at org.openide.loaders.DataObjectPool.runAtomicAction(DataObjectPool.java:286) at org.openide.loaders.DataObject.invokeAtomicAction(DataObject.java:1051) at org.openide.loaders.DataObject.rename(DataObject.java:836) at org.netbeans.modules.cnd.refactoring.support.RenameHandlerImpl.handleRename(RenameHandlerImpl.java:89) at org.netbeans.modules.cnd.source.SourceDataNode.setName(SourceDataNode.java:106) at org.openide.nodes.FilterNode.setName(FilterNode.java:494) at org.netbeans.modules.cnd.makeproject.ui.ViewItemNode.access$401(ViewItemNode.java:99) at org.netbeans.modules.cnd.makeproject.ui.ViewItemNode$2.run(ViewItemNode.java:155) at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:1425) at org.netbeans.modules.openide.util.GlobalLookup.execute(GlobalLookup.java:59) at org.openide.util.lookup.Lookups.executeWith(Lookups.java:294) at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:2038) and "LocalHistoryStore" at org.netbeans.modules.localhistory.store.LocalHistoryStoreImpl.storeChangedSync(LocalHistoryStoreImpl.java:213) at org.netbeans.modules.localhistory.store.LocalHistoryStoreImpl.access$400(LocalHistoryStoreImpl.java:83) at org.netbeans.modules.localhistory.store.LocalHistoryStoreImpl$3.run(LocalHistoryStoreImpl.java:189) at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:1425) at org.netbeans.modules.openide.util.GlobalLookup.execute(GlobalLookup.java:59) at org.openide.util.lookup.Lookups.executeWith(Lookups.java:294) at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:2038) Resuming 1-st one ("ViewItemNode" - RemoteDirectory.renameChild(RemoteDirectory.java:773)), then 2-nd one ("LocalHistoryStore") 3) So we get the following situation "ViewItemNode" tries to acquire (A), while acquired (B) at org.netbeans.modules.localhistory.store.LocalHistoryStoreImpl.waitForProcessedStoring(LocalHistoryStoreImpl.java:1246) at org.netbeans.modules.localhistory.LocalHistoryVCSInterceptor.beforeMove(LocalHistoryVCSInterceptor.java:158) at org.netbeans.modules.versioning.core.filesystems.VCSFilesystemInterceptor$DelegatingInterceptor.beforeMove(VCSFilesystemInterceptor.java:642) at org.netbeans.modules.versioning.core.filesystems.VCSFilesystemInterceptor.getMoveHandlerIntern(VCSFilesystemInterceptor.java:341) at org.netbeans.modules.versioning.core.filesystems.VCSFilesystemInterceptor.getRenameHandler(VCSFilesystemInterceptor.java:336) at org.netbeans.modules.remotefs.versioning.spi.FilesystemInterceptorProviderImpl$FilesystemInterceptorImpl.getRenameHandler(FilesystemInterceptorProviderImpl.java:193) at org.netbeans.modules.remote.impl.fs.RemoteDirectory.renameChild(RemoteDirectory.java:793) at org.netbeans.modules.remote.impl.fs.RemoteFileObjectBase.renameImpl(RemoteFileObjectBase.java:692) at org.netbeans.modules.remote.impl.fs.RemoteFileObjectBase.rename(RemoteFileObjectBase.java:655) at org.netbeans.modules.remote.impl.fs.RemoteFileObject.rename(RemoteFileObject.java:239) at org.openide.loaders.FileEntry.rename(FileEntry.java:97) at org.openide.loaders.MultiDataObject.handleRename(MultiDataObject.java:636) at org.openide.loaders.DataObject$1Op.run(DataObject.java:821) at org.openide.loaders.DataObject$1WrapRun.run(DataObject.java:1031) at org.openide.loaders.DataObjectPool$1WrapAtomicAction.run(DataObjectPool.java:261) at org.openide.filesystems.EventControl.runAtomicAction(EventControl.java:127) at org.openide.filesystems.FileSystem.runAtomicAction(FileSystem.java:499) at org.openide.loaders.DataObjectPool.runAtomicAction(DataObjectPool.java:286) at org.openide.loaders.DataObject.invokeAtomicAction(DataObject.java:1051) at org.openide.loaders.DataObject.rename(DataObject.java:836) at org.netbeans.modules.cnd.refactoring.support.RenameHandlerImpl.handleRename(RenameHandlerImpl.java:89) at org.netbeans.modules.cnd.source.SourceDataNode.setName(SourceDataNode.java:106) at org.openide.nodes.FilterNode.setName(FilterNode.java:494) at org.netbeans.modules.cnd.makeproject.ui.ViewItemNode.access$401(ViewItemNode.java:99) at org.netbeans.modules.cnd.makeproject.ui.ViewItemNode$2.run(ViewItemNode.java:155) at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:1425) at org.netbeans.modules.openide.util.GlobalLookup.execute(GlobalLookup.java:59) at org.openide.util.lookup.Lookups.executeWith(Lookups.java:294) at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:2038) "LocalHistoryStore" tries to acquire (B), while acquired (A) at sun.misc.Unsafe.park(Unsafe.java) at java.util.concurrent.locks.LockSupport.park(LockSupport.java:186) at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:834) at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(AbstractQueuedSynchronizer.java:867) at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:1197) at java.util.concurrent.locks.ReentrantReadWriteLock$WriteLock.lock(ReentrantReadWriteLock.java:945) at org.netbeans.modules.remote.impl.fs.RemoteDirectory.getDirectoryStorageImpl(RemoteDirectory.java:1115) at org.netbeans.modules.remote.impl.fs.RemoteDirectory.refreshDirectoryStorage(RemoteDirectory.java:563) at org.netbeans.modules.remote.impl.fs.RemoteDirectory.refreshImpl(RemoteDirectory.java:1665) at org.netbeans.modules.remote.impl.fs.RemotePlainFile.refreshImpl(RemotePlainFile.java:450) at org.netbeans.modules.remote.impl.fs.RemoteFileObjectBase.refresh(RemoteFileObjectBase.java:561) at org.netbeans.modules.remote.impl.fs.RemoteFileObjectBase.refresh(RemoteFileObjectBase.java:576) at org.netbeans.modules.remote.impl.fs.RemoteFileObject.refresh(RemoteFileObject.java:254) at org.netbeans.modules.remotefs.versioning.spi.FileProxyProviderImpl$FileOperationsImpl.getInputStream(FileProxyProviderImpl.java:263) at org.netbeans.modules.versioning.core.api.VCSFileProxy.getInputStream(VCSFileProxy.java:361) at org.netbeans.modules.localhistory.utils.FileUtils.createInputStream(FileUtils.java:317) at org.netbeans.modules.localhistory.utils.FileUtils.copy(FileUtils.java:144) at org.netbeans.modules.localhistory.store.LocalHistoryStoreImpl.storeChangedSync(LocalHistoryStoreImpl.java:213) at org.netbeans.modules.localhistory.store.LocalHistoryStoreImpl.access$400(LocalHistoryStoreImpl.java:83) at org.netbeans.modules.localhistory.store.LocalHistoryStoreImpl$3.run(LocalHistoryStoreImpl.java:189) at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:1425) at org.netbeans.modules.openide.util.GlobalLookup.execute(GlobalLookup.java:59) at org.openide.util.lookup.Lookups.executeWith(Lookups.java:294) at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:2038)
http://hg.netbeans.org/cnd-main/rev/f7105aa3256e http://hg.netbeans.org/cnd-main/rev/c35ed7880985
Integrated into 'main-silver', will be available in build *201502260001* on http://bits.netbeans.org/dev/nightly/ (upload may still be in progress) Changeset: http://hg.netbeans.org/main-silver/rev/c35ed7880985 User: Vladimir Kvashin <vkvashin@netbeans.org> Log: fixed #250177 - Rename works too slowly (in Full Remote projects)