Community
Participate
Working Groups
Build Identifier: HEAD RemoteTools was using ssh exec of cat to transfer files. This had the disadvantages: - being slow - no guarantee of file being saved when stream is closed. As a consequence files were not available when stat or read was done right after save (e.g. when creating project) - no error handling of transportation problems With this patch sftp is used for uploading and downloading of files. This solves all above problems. No fall-back to exec are used, because sftp works reliable in all our tests. The fall-back which was there is removed by the patch because it causes a thread dead-lock. Reproducible: Always
Created attachment 157318 [details] Patch to use sftp for file up/download
Can you please add an "I declare..." statement that you contribute under EPL and have the right doing so -- see http://www.eclipse.org/dsdp/tm/development/committer_howto.php#external_contrib Thanks!
Although this makes project creation MUCH more reliable, it still doesn't completely fix the problem. See the end of the trace below where the .project file was not found (this was using a Mac OS X frontend and a Linux backend). I'll still apply the patch, but there is obviously something else going on here. It looks like an earlier OPENINPUTSTREAM on the same file worked, so it is very weird. GETCHILD: .bash_logout GETCHILD: .bash_profile GETCHILD: .bashrc GETCHILD: .emacs GETCHILD: .xemacs GETCHILD: .pbs_spool GETCHILD: scratch-global GETCHILD: .soft GETCHILD: .soft.cache.csh GETCHILD: .soft.cache.sh GETCHILD: .history GETCHILD: mpqc GETCHILD: .viminfo GETCHILD: ptp GETCHILD: openmpi-1.4a1r21889.tar.gz GETCHILD: openmpi-1.4a1r21889 GETCHILD: ompi GETCHILD: mpqc-2.3.1.tar.bz2 GETCHILD: mpqc-2.3.1 GETCHILD: cblas.tgz GETCHILD: CBLAS GETCHILD: blas_linux.tgz GETCHILD: blas_linux.a GETCHILD: LAPACK GETCHILD: lapack_linux.tgz GETCHILD: lapack_linux.a GETCHILD: make.inc.linux GETCHILD: .ssh GETCHILD: xxx.tar GETCHILD: pbs GETCHILD: shallow GETCHILD: .bash_history GETCHILD: x GETCHILD: test.c GETCHILD: test GETCHILD: xxx GETCHILD: .cvspass GETCHILD: rdt-server-linux-3.0.0.tar GETCHILD: rdt-server GETCHILD: abe_test GETCHILD: .eclipse GETCHILD: sftp_test GETCHILD: .eclipsesettings GETCHILD: yyyy FETCHINFO: /u/ac/grw/test FETCHINFO: /u/ac/grw/tes FETCHINFO: /u/ac/grw/te FETCHINFO: /u/ac/grw/t FETCHINFO: /u/ac/grw/ FETCHINFO: /u/ac/grw/r FETCHINFO: /u/ac/grw/re FETCHINFO: /u/ac/grw/rem FETCHINFO: /u/ac/grw/remo FETCHINFO: /u/ac/grw/remot FETCHINFO: /u/ac/grw/remote FETCHINFO: /u/ac/grw/remote GETCHILD: .project FETCHINFO: /u/ac/grw/remote/.project FETCHINFO: /u/ac/grw/remote GETCHILD: .project FETCHINFO: /u/ac/grw/remote/.project GETCHILD: .project GETPARENT: /u/ac/grw/remote/.project MKDIR: /u/ac/grw/remote OPENOUTPUTSTREAM: /u/ac/grw/remote/.project FETCHINFO: /u/ac/grw/remote/.project GETCHILD: .project GETCHILD: .project FETCHINFO: /u/ac/grw/remote/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote/.project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote/.project GETCHILD: .project OPENOUTPUTSTREAM: /u/ac/grw/remote/.project FETCHINFO: /u/ac/grw/remote/.project GETCHILD: .project GETCHILD: .project FETCHINFO: /u/ac/grw/remote/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote/.project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote/.project GETCHILD: .project OPENOUTPUTSTREAM: /u/ac/grw/remote/.project FETCHINFO: /u/ac/grw/remote/.project GETCHILD: .project GETCHILD: .project FETCHINFO: /u/ac/grw/remote/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote/.project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote/.project GETCHILD: .project OPENOUTPUTSTREAM: /u/ac/grw/remote/.project FETCHINFO: /u/ac/grw/remote/.project GETCHILD: .project GETCHILD: .cproject FETCHINFO: /u/ac/grw/remote/.cproject GETCHILD: .cdtproject FETCHINFO: /u/ac/grw/remote/.cdtproject GETCHILD: .project FETCHINFO: /u/ac/grw/remote/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote/.project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote/.project GETCHILD: .project OPENOUTPUTSTREAM: /u/ac/grw/remote/.project FETCHINFO: /u/ac/grw/remote/.project GETCHILD: .project GETCHILD: .project FETCHINFO: /u/ac/grw/remote/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote/.project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote/.project GETCHILD: .project OPENOUTPUTSTREAM: /u/ac/grw/remote/.project FETCHINFO: /u/ac/grw/remote/.project GETCHILD: .project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote/.project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote/.project GETCHILD: .project OPENOUTPUTSTREAM: /u/ac/grw/remote/.project FETCHINFO: /u/ac/grw/remote/.project GETCHILD: .project GETCHILD: .cproject GETCHILD: .cproject FETCHINFO: /u/ac/grw/remote/.cproject FETCHINFO: /u/ac/grw/remote GETCHILD: .cproject FETCHINFO: /u/ac/grw/remote/.cproject GETCHILD: .cproject GETPARENT: /u/ac/grw/remote/.cproject MKDIR: /u/ac/grw/remote OPENOUTPUTSTREAM: /u/ac/grw/remote/.cproject FETCHINFO: /u/ac/grw/remote/.cproject GETCHILD: .cproject GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote/.project GETCHILD: .project OPENOUTPUTSTREAM: /u/ac/grw/remote/.project FETCHINFO: /u/ac/grw/remote/.project GETCHILD: .project GETCHILD: .project FETCHINFO: /u/ac/grw/remote/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote/.project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote/.project GETCHILD: .project OPENOUTPUTSTREAM: /u/ac/grw/remote/.project FETCHINFO: /u/ac/grw/remote/.project GETCHILD: .project GETCHILD: .project FETCHINFO: /u/ac/grw/remote/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote/.project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote/.project GETCHILD: .project OPENOUTPUTSTREAM: /u/ac/grw/remote/.project FETCHINFO: /u/ac/grw/remote/.project GETCHILD: .project GETCHILD: .project FETCHINFO: /u/ac/grw/remote/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote/.project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote/.project GETCHILD: .project OPENOUTPUTSTREAM: /u/ac/grw/remote/.project FETCHINFO: /u/ac/grw/remote/.project GETCHILD: .project GETCHILD: .project FETCHINFO: /u/ac/grw/remote/.project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote/.project OPENINPUTSTREAM: File doesn't exist GETCHILD: .project FETCHINFO: /u/ac/grw/remote/.project GETCHILD: .project GETPARENT: /u/ac/grw/remote/.project MKDIR: /u/ac/grw/remote OPENOUTPUTSTREAM: /u/ac/grw/remote/.project GETCHILD: .settings GETCHILD: .settings FETCHINFO: /u/ac/grw/remote/.settings GETCHILD: .project FETCHINFO: /u/ac/grw/remote/.project FETCHINFO: /u/ac/grw/remote GETCHILD: .cproject GETCHILD: .project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote/.project OPENINPUTSTREAM: File doesn't exist FETCHINFO: /u/ac/grw/remote/.project GETCHILD: CVS FETCHINFO: /u/ac/grw/remote/CVS GETCHILD: CVS FETCHINFO: /u/ac/grw/remote/CVS
I, Roland Schulz, declare that I developed attached code from scratch, without referencing any 3rd party materials except material licensed under the EPL. I am authorized by my employer to make this contribution under the EPL. We have a version which solves most other problems. We'll send a patch of that later today.
Great. Should I apply this patch, or wait for the new one?
(In reply to comment #5) > Great. Should I apply this patch, or wait for the new one? I would wait on the new one. It is clearly better. The problem with that patch is that the default sftpchannel is always used. And some file operations are from worker threads. Since the sftpchannel is not thread safe, it does not work as soon as two threads use it. We have now implemented a sftpchannel pool and each thread takes a channel from this pool, when it wants to do a file operation. This all works. At the moment we are testing more to check whether we find still cases where even this new patch does not work. The remaining problem is that the pool can dead-lock but we think this should be fixed soon.
Created attachment 157577 [details] Replacement for earlier patch adding ChannelSftp queue The new patch adds a queue to the remotetools.internal.ssh.Connection class. This is important to prevent several threads simultaneously use the same ChannelSftp since it is not thread-safe. This patch should now reliable work besides one remaining problem. It fails if Display.syncExec or some other method interrupting the main thread is called (see ptp-dev list). Since it is still work in progress I commented out the debug message but left them in the code. We moved all sftp operations to one central place (FileTools). This can be undone easily if it is a problem for the release branch. Or is only removing the public interface a problem?
This patch seems to combine some of the other patch that Dieter submitted which changes the IRemoteFileTools interface. I applied Dieter's patch to HEAD, but I can't apply it to 3.0 because of the interface change. I'll apply the original patch to 3.0 since it does improve things, and this patch to HEAD.
(In reply to comment #8) > This patch seems to combine some of the other patch that Dieter submitted which > changes the IRemoteFileTools interface. I applied Dieter's patch to HEAD, but I > can't apply it to 3.0 because of the interface change. > > I'll apply the original patch to 3.0 since it does improve things, and this > patch to HEAD. No this patch is on top of the earlier patch submitted by Dieter. We changed the interface in both cases. I just make a new patch which doesn't move the functions. I'll have that ready in just a few minutes. Then you can apply this. Roland
Created attachment 157621 [details] Patch as before without changing interface This patch is as the last patch (adding the queue to the original patch) but without changing the interface. It is still done relative to HEAD. So it might be a little bit difficult to merge. I don't have the RELEASE branch set-up yet so I can't produce a patch relative to that. I'll try this now. And set a another patch and case you haven't merged it already until then.
Created attachment 157629 [details] Patch as before without changing interface - now relative to RELEASE This is the patch relative to RELEASE. Because FileTools.fetchRemoteAttr wasn't using sftp yet in RELEASE this patch additional changes this.
The latest patch applied fine to 3.0. However, when I create a remote project, I'm seeing some IO exceptions and messages from fetchRemoteAttr. The project seems to have been created ok, so I'm not sure if these are a problem or not. GETCHILD: .bash_logout GETCHILD: .bash_profile GETCHILD: .bashrc GETCHILD: .emacs GETCHILD: .xemacs GETCHILD: .pbs_spool GETCHILD: scratch-global GETCHILD: .soft GETCHILD: .soft.cache.csh GETCHILD: .soft.cache.sh GETCHILD: .history GETCHILD: mpqc GETCHILD: .viminfo GETCHILD: ptp GETCHILD: openmpi-1.4a1r21889.tar.gz GETCHILD: openmpi-1.4a1r21889 GETCHILD: ompi GETCHILD: mpqc-2.3.1.tar.bz2 GETCHILD: mpqc-2.3.1 GETCHILD: cblas.tgz GETCHILD: CBLAS GETCHILD: blas_linux.tgz GETCHILD: blas_linux.a GETCHILD: LAPACK GETCHILD: lapack_linux.tgz GETCHILD: lapack_linux.a GETCHILD: make.inc.linux GETCHILD: .ssh GETCHILD: xxx.tar GETCHILD: pbs GETCHILD: shallow GETCHILD: .bash_history GETCHILD: x GETCHILD: test.c GETCHILD: test GETCHILD: xxx GETCHILD: .cvspass GETCHILD: remote GETCHILD: rdt-server-linux-3.0.0.tar GETCHILD: rdt-server GETCHILD: abe_test GETCHILD: .eclipse GETCHILD: sftp_test GETCHILD: .eclipsesettings GETCHILD: yyyy FETCHINFO: /u/ac/grw/remote2 fetchRemoteAttr: no such file FETCHINFO: /u/ac/grw/remote2 GETCHILD: .project FETCHINFO: /u/ac/grw/remote2/.project fetchRemoteAttr: no such file FETCHINFO: /u/ac/grw/remote2 GETCHILD: .project FETCHINFO: /u/ac/grw/remote2/.project GETCHILD: .project GETPARENT: /u/ac/grw/remote2/.project MKDIR: /u/ac/grw/remote2 OPENOUTPUTSTREAM: /u/ac/grw/remote2/.project FETCHINFO: /u/ac/grw/remote2/.project GETCHILD: .project GETCHILD: .project FETCHINFO: /u/ac/grw/remote2/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote2/.project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote2/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote2/.project GETCHILD: .project OPENOUTPUTSTREAM: /u/ac/grw/remote2/.project FETCHINFO: /u/ac/grw/remote2/.project GETCHILD: .project GETCHILD: .project FETCHINFO: /u/ac/grw/remote2/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote2/.project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote2/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote2/.project GETCHILD: .project OPENOUTPUTSTREAM: /u/ac/grw/remote2/.project FETCHINFO: /u/ac/grw/remote2/.project GETCHILD: .project GETCHILD: .project FETCHINFO: /u/ac/grw/remote2/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote2/.project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote2/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote2/.project GETCHILD: .project OPENOUTPUTSTREAM: /u/ac/grw/remote2/.project FETCHINFO: /u/ac/grw/remote2/.project GETCHILD: .project GETCHILD: .cproject FETCHINFO: /u/ac/grw/remote2/.cproject fetchRemoteAttr: no such file GETCHILD: .cproject FETCHINFO: /u/ac/grw/remote2/.cproject GETCHILD: .cdtproject FETCHINFO: /u/ac/grw/remote2/.cdtproject fetchRemoteAttr: no such file GETCHILD: .project FETCHINFO: /u/ac/grw/remote2/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote2/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote2/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote2/.project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote2/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote2/.project GETCHILD: .project OPENOUTPUTSTREAM: /u/ac/grw/remote2/.project FETCHINFO: /u/ac/grw/remote2/.project GETCHILD: .project GETCHILD: .project FETCHINFO: /u/ac/grw/remote2/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote2/.project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote2/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote2/.project GETCHILD: .project OPENOUTPUTSTREAM: /u/ac/grw/remote2/.project FETCHINFO: /u/ac/grw/remote2/.project GETCHILD: .project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote2/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote2/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote2/.project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote2/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote2/.project GETCHILD: .project OPENOUTPUTSTREAM: /u/ac/grw/remote2/.project FETCHINFO: /u/ac/grw/remote2/.project GETCHILD: .project GETCHILD: .cproject GETCHILD: .cproject FETCHINFO: /u/ac/grw/remote2/.cproject FETCHINFO: /u/ac/grw/remote2 GETCHILD: .cproject FETCHINFO: /u/ac/grw/remote2/.cproject GETCHILD: .cproject GETPARENT: /u/ac/grw/remote2/.cproject MKDIR: /u/ac/grw/remote2 OPENOUTPUTSTREAM: /u/ac/grw/remote2/.cproject FETCHINFO: /u/ac/grw/remote2/.cproject GETCHILD: .cproject GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote2/.project java.io.IOException: error at com.jcraft.jsch.ChannelSftp$2.close(ChannelSftp.java:1160) at java.io.FilterInputStream.close(FilterInputStream.java:155) at org.eclipse.ptp.remotetools.internal.ssh.FileTools$MySFTPChannelCloseInputStream.close(FileTools.java:391) at java.io.BufferedInputStream.close(BufferedInputStream.java:451) at org.eclipse.core.internal.utils.FileUtil.safeClose(FileUtil.java:182) at org.eclipse.core.internal.localstore.FileSystemResourceManager.descriptionChanged(FileSystemResourceManager.java:303) at org.eclipse.core.internal.localstore.FileSystemResourceManager.internalWrite(FileSystemResourceManager.java:517) at org.eclipse.core.internal.resources.Project.writeDescription(Project.java:1169) at org.eclipse.core.internal.resources.Project.setDescription(Project.java:1058) at org.eclipse.ptp.rdt.ui.wizards.RemoteMakefileWizardHandler.createProject(RemoteMakefileWizardHandler.java:104) at org.eclipse.cdt.ui.wizards.CDTCommonProjectWizard$1$1$1.run(CDTCommonProjectWizard.java:257) at org.eclipse.ui.actions.WorkspaceModifyDelegatingOperation.execute(WorkspaceModifyDelegatingOperation.java:69) at org.eclipse.ui.actions.WorkspaceModifyOperation$1.run(WorkspaceModifyOperation.java:106) at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1800) at org.eclipse.ui.actions.WorkspaceModifyOperation.run(WorkspaceModifyOperation.java:118) at org.eclipse.jface.operation.ModalContext.runInCurrentThread(ModalContext.java:464) at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:372) at org.eclipse.jface.wizard.WizardDialog.run(WizardDialog.java:944) at org.eclipse.cdt.ui.wizards.CDTCommonProjectWizard$1$1.run(CDTCommonProjectWizard.java:266) at org.eclipse.ui.internal.UILockListener.doPendingWork(UILockListener.java:155) at org.eclipse.ui.internal.UISynchronizer$3.run(UISynchronizer.java:158) at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134) at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3405) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3102) at org.eclipse.jface.operation.ModalContext$ModalContextThread.block(ModalContext.java:173) at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:388) at org.eclipse.jface.wizard.WizardDialog.run(WizardDialog.java:944) at org.eclipse.cdt.ui.wizards.CDTCommonProjectWizard.invokeRunnable(CDTCommonProjectWizard.java:179) at org.eclipse.cdt.ui.wizards.CDTCommonProjectWizard.getProject(CDTCommonProjectWizard.java:157) at org.eclipse.cdt.ui.wizards.CDTCommonProjectWizard.performFinish(CDTCommonProjectWizard.java:195) at org.eclipse.jface.wizard.WizardDialog.finishPressed(WizardDialog.java:752) at org.eclipse.jface.wizard.WizardDialog.buttonPressed(WizardDialog.java:373) at org.eclipse.jface.dialogs.Dialog$2.widgetSelected(Dialog.java:624) at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:228) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) at org.eclipse.swt.widgets.Display.sendEvent(Display.java:3543) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1250) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1273) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258) at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1079) at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3441) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3100) at org.eclipse.jface.window.Window.runEventLoop(Window.java:825) at org.eclipse.jface.window.Window.open(Window.java:801) at org.eclipse.ui.internal.navigator.wizards.WizardShortcutAction.run(WizardShortcutAction.java:98) at org.eclipse.jface.action.Action.runWithEvent(Action.java:498) at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:584) at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:501) at org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:411) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) at org.eclipse.swt.widgets.Display.sendEvent(Display.java:3543) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1250) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1273) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258) at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1079) at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3441) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3100) at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2405) at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2369) at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2221) at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:493) at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:113) at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:368) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) 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.eclipse.equinox.launcher.Main.invokeFramework(Main.java:559) at org.eclipse.equinox.launcher.Main.basicRun(Main.java:514) at org.eclipse.equinox.launcher.Main.run(Main.java:1311) at org.eclipse.equinox.launcher.Main.main(Main.java:1287) GETCHILD: .project FETCHINFO: /u/ac/grw/remote2/.project GETCHILD: .project OPENOUTPUTSTREAM: /u/ac/grw/remote2/.project java.io.InterruptedIOException at java.io.PipedInputStream.read(PipedInputStream.java:312) at java.io.PipedInputStream.read(PipedInputStream.java:361) at com.jcraft.jsch.ChannelSftp.fill(ChannelSftp.java:2325) at com.jcraft.jsch.ChannelSftp.header(ChannelSftp.java:2351) at com.jcraft.jsch.ChannelSftp.checkStatus(ChannelSftp.java:1924) at com.jcraft.jsch.ChannelSftp.access$300(ChannelSftp.java:36) at com.jcraft.jsch.ChannelSftp$1.flush(ChannelSftp.java:713) at com.jcraft.jsch.ChannelSftp$1.close(ChannelSftp.java:729) at java.io.FilterOutputStream.close(FilterOutputStream.java:143) at org.eclipse.ptp.remotetools.internal.ssh.FileTools$MySFTPChannelCloseOutputStream.close(FileTools.java:357) at org.eclipse.core.internal.utils.FileUtil.safeClose(FileUtil.java:196) at org.eclipse.core.internal.utils.FileUtil.transferStreams(FileUtil.java:249) at org.eclipse.core.internal.localstore.FileSystemResourceManager.write(FileSystemResourceManager.java:957) at org.eclipse.core.internal.localstore.FileSystemResourceManager.internalWrite(FileSystemResourceManager.java:531) at org.eclipse.core.internal.resources.Project.writeDescription(Project.java:1169) at org.eclipse.core.internal.resources.Project.setDescription(Project.java:1058) at org.eclipse.ptp.rdt.ui.wizards.RemoteMakefileWizardHandler.createProject(RemoteMakefileWizardHandler.java:104) at org.eclipse.cdt.ui.wizards.CDTCommonProjectWizard$1$1$1.run(CDTCommonProjectWizard.java:257) at org.eclipse.ui.actions.WorkspaceModifyDelegatingOperation.execute(WorkspaceModifyDelegatingOperation.java:69) at org.eclipse.ui.actions.WorkspaceModifyOperation$1.run(WorkspaceModifyOperation.java:106) at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1800) at org.eclipse.ui.actions.WorkspaceModifyOperation.run(WorkspaceModifyOperation.java:118) at org.eclipse.jface.operation.ModalContext.runInCurrentThread(ModalContext.java:464) at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:372) at org.eclipse.jface.wizard.WizardDialog.run(WizardDialog.java:944) at org.eclipse.cdt.ui.wizards.CDTCommonProjectWizard$1$1.run(CDTCommonProjectWizard.java:266) at org.eclipse.ui.internal.UILockListener.doPendingWork(UILockListener.java:155) at org.eclipse.ui.internal.UISynchronizer$3.run(UISynchronizer.java:158) at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134) at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3405) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3102) at org.eclipse.jface.operation.ModalContext$ModalContextThread.block(ModalContext.java:173) at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:388) at org.eclipse.jface.wizard.WizardDialog.run(WizardDialog.java:944) at org.eclipse.cdt.ui.wizards.CDTCommonProjectWizard.invokeRunnable(CDTCommonProjectWizard.java:179) at org.eclipse.cdt.ui.wizards.CDTCommonProjectWizard.getProject(CDTCommonProjectWizard.java:157) at org.eclipse.cdt.ui.wizards.CDTCommonProjectWizard.performFinish(CDTCommonProjectWizard.java:195) at org.eclipse.jface.wizard.WizardDialog.finishPressed(WizardDialog.java:752) at org.eclipse.jface.wizard.WizardDialog.buttonPressed(WizardDialog.java:373) at org.eclipse.jface.dialogs.Dialog$2.widgetSelected(Dialog.java:624) at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:228) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) at org.eclipse.swt.widgets.Display.sendEvent(Display.java:3543) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1250) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1273) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258) at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1079) at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3441) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3100) at org.eclipse.jface.window.Window.runEventLoop(Window.java:825) at org.eclipse.jface.window.Window.open(Window.java:801) at org.eclipse.ui.internal.navigator.wizards.WizardShortcutAction.run(WizardShortcutAction.java:98) at org.eclipse.jface.action.Action.runWithEvent(Action.java:498) at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:584) at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:501) at org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:411) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) at org.eclipse.swt.widgets.Display.sendEvent(Display.java:3543) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1250) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1273) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258) at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1079) at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3441) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3100) at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2405) at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2369) at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2221) at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:493) at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:113) at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:368) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) 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.eclipse.equinox.launcher.Main.invokeFramework(Main.java:559) at org.eclipse.equinox.launcher.Main.basicRun(Main.java:514) at org.eclipse.equinox.launcher.Main.run(Main.java:1311) at org.eclipse.equinox.launcher.Main.main(Main.java:1287) FETCHINFO: /u/ac/grw/remote2/.project GETCHILD: .project GETCHILD: .project FETCHINFO: /u/ac/grw/remote2/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote2/.project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote2/.project OPENINPUTSTREAM: 0: Success GETCHILD: .project FETCHINFO: /u/ac/grw/remote2/.project GETCHILD: .project OPENOUTPUTSTREAM: /u/ac/grw/remote2/.project FETCHINFO: /u/ac/grw/remote2 GETCHILD: .settings GETCHILD: .settings FETCHINFO: /u/ac/grw/remote2/.settings fetchRemoteAttr: no such file GETCHILD: .project FETCHINFO: /u/ac/grw/remote2/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote2/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote2/.project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote2/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote2/.project GETCHILD: .project OPENOUTPUTSTREAM: /u/ac/grw/remote2/.project FETCHINFO: /u/ac/grw/remote2/.project GETCHILD: .project
This is the problem described in http://dev.eclipse.org/mhonarc/lists/ptp-dev/msg03317.html and http://sourceforge.net/mailarchive/forum.php?thread_name=c93c21391001281735n31804dc9lfe6e7447cc4b8896@mail.gmail.com&forum_name=jsch-users So this is the one remaining problem we are aware of. If you think we should go ahead with the work-around proposed in this mail, we can do this today.
Yes, the workaround sounds like a good approach. Please go ahead.
(In reply to comment #14) > Yes, the workaround sounds like a good approach. Please go ahead. Okay. I should add that the cleanest solution would be to 'convince' Eclipse not to call our SFTP code from the main thread directly (but asynchronously using something like LazyContentProvider). In general no lengthy operation should be executed on the main thread since this would hamper the event dispatching. Display#syncExec essentially prevents us from violating this rule by interrupting our SFTP transfer thus freeing the UI thread for window repainting. The workaround ignores Display#syncExec's interruptUI() call and guarantees correct SFTP transfer at the cost of adding a lot of complexity and freezing the UI. Perhaps we should find another solution in the long run. Cheers, Dieter
Rather than ignoring the interruptUI call, would it be possible to run the sftp command in an asynchronous thread and use an IProgressMonitor to enable the operation to be cancelled. This would prevent the UI from freezing, and the user will see a progress dialog that can be cancelled.
(In reply to comment #16) > Rather than ignoring the interruptUI call, would it be possible to run the sftp > command in an asynchronous thread and use an IProgressMonitor to enable the > operation to be cancelled. This would prevent the UI from freezing, and the > user will see a progress dialog that can be cancelled. I suggested looking into the IProgressMonitor option before but somehow it was pushed back for later consideration. Perhaps it would be really best to do that first before rushing ahead with a dodgy workaround even if we miss the release deadline.
I think that would be better. We can do another bug fix release in a week or 2 that includes this.
(In reply to comment #17) > (In reply to comment #16) > > Rather than ignoring the interruptUI call, would it be possible to run the sftp > > command in an asynchronous thread and use an IProgressMonitor to enable the > > operation to be cancelled. This would prevent the UI from freezing, and the > > user will see a progress dialog that can be cancelled. > > I suggested looking into the IProgressMonitor option before but somehow it was > pushed back for later consideration. Perhaps it would be really best to do that > first before rushing ahead with a dodgy workaround even if we miss the release > deadline. I also would like to add an IProgressMonitor. But I think this is something which can be added to the proposed change - it doesn't replace it. For both it is needed that all sftp operations are done in a separate thread/job. To add an IProgressMonitor after this is done should be very easy. I don't see how the IProgressMonitor or anythning similar could work without the proposed changes in my mail.
The workaround is probably the way to go at the moment unless Greg prefers us to wait and look into IProgressMonitor until the pending request to the Jsch team concerning our suggestions to change the SFTP interrupt behavior have been answered. Cheers, Dieter
Could you wrapper each call with something like the following, or am I missing something? Thread tmp=new Thread(new Runnable(){ public void run(){ getSFTPChannel().operation(); } }); tmp.start(); while (tmp.isAlive() && !monitor.isCanceled() { tmp.join(timeout); } if (tmp.isAlive() && monitor.isCanceled() { tmp.interrupt(); }
By all means go with the workaround if you like. Since the UI is only likely to freeze in the event of network issues, it's probably going to be fairly rare. We're talking about only operations on an existing sftp channel, right? Looking at the responses (or lack of) from the jsch people, I would be surprised if they fix this problem any time soon (or ever). In the long run, some other workaround will probably be necessary.
(In reply to comment #22) > By all means go with the workaround if you like. Since the UI is only likely to > freeze in the event of network issues, it's probably going to be fairly rare. > We're talking about only operations on an existing sftp channel, right? > > Looking at the responses (or lack of) from the jsch people, I would be > surprised if they fix this problem any time soon (or ever). In the long run, > some other workaround will probably be necessary. I suggest the following. What do you both think? private ExecutorService pool = Executors.newSingleThreadExecutor(); //should be member variable, so that pool is initialized only once for FileTools /** * Read attributes of the remote file. * @param path * @return A Jsch data structure with attributes or null if path does not exist. * @throws RemoteExecutionException */ protected RemoteFileAttributes fetchRemoteAttr(final String path, IProgressMonitor monitor) throws RemoteOperationException, CancelException { try { test(); } catch (RemoteConnectionException e) { throw new RemoteOperationException(e.getLocalizedMessage()); } catch (CancelException e) { throw new RemoteOperationException(e.getLocalizedMessage()); } // System.out.println("fetchRemoteAttr"); validateRemotePath(path); //synchronized (manager) { SftpATTRS attrs = null; try { //submit should be only on pool if thread is main Callable<SftpATTRS> c = new Callable<SftpATTRS>(){ @Override public SftpATTRS call() throws Exception { ChannelSftp sftpChannel = null; SftpATTRS attrs = null; try { sftpChannel = getSFTPChannel(); attrs = sftpChannel.stat(path); } finally { releaseSFTPChannel(sftpChannel); } return attrs; } }; attrs = callInThread(c, "Get file attributes", monitor); // System.out.println(attrs.toString()); } catch (Throwable e) { //e.printStackTrace(); if (SftpException.class.isInstance(e) && ((SftpException)e).id == ChannelSftp.SSH_FX_NO_SUCH_FILE) { System.out.println("fetchRemoteAttr: no such file"); return null; } throw new RemoteOperationException(e); } finally { monitor.done(); } return RemoteFileAttributes.getAttributes(attrs); //} } //throws Throwable because getCause returns Throwable private <T> T callInThread(Callable<T> c, String jobName, IProgressMonitor monitor) throws Throwable { Future<T> future = null; T ret = null; boolean bMainThread = false; try { if (Thread.currentThread().equals(PlatformUI.getWorkbench().getDisplay().getThread())) bMainThread = true; } catch (IllegalStateException e) { //ignore: Workspace not created yet - we can run in main thread } if (bMainThread) { future = pool.submit(c); monitor.beginTask(jobName, 1); while (ret==null) { if (monitor.isCanceled()) throw new CancelException(); try { ret = future.get(100,TimeUnit.MILLISECONDS); } catch (InterruptedException e) { Thread.currentThread().interrupt(); //set current thread flag } catch (TimeoutException e) { //ignore } catch (ExecutionException e) { throw e.getCause(); } } monitor.worked(1); } else { ret = c.call(); } return ret; }
Just something I noticed I would like your opinion on. Below is a stack trace where Display#syncExec interrupts SFTP execution since we are running on the main thread. What strikes me as a little odd, is that seems that the call to FileTools.getOutputStream originates from the CDT builder further downstream. Shouldn't almost any builder not run on the dispatch thread but rather as a job? Is this potentially a bug? org.eclipse.ptp.remotetools.internal.ssh.FileTools.getOutputStream(FileTools.java:331) org.eclipse.ptp.remote.remotetools.core.RemoteToolsFileStore.openOutputStream(RemoteToolsFileStore.java:365) org.eclipse.core.internal.localstore.FileSystemResourceManager.write(FileSystemResourceManager.java:962) org.eclipse.core.internal.localstore.FileSystemResourceManager.internalWrite(FileSystemResourceManager.java:539) org.eclipse.core.internal.resources.Project.writeDescription(Project.java:1196) org.eclipse.core.internal.resources.Project.setDescription(Project.java:1085) org.eclipse.core.internal.resources.Project.setDescription(Project.java:1109) org.eclipse.cdt.make.internal.core.BuildInfoFactory$BuildInfoProject.putString(BuildInfoFactory.java:490) org.eclipse.cdt.make.internal.core.BuildInfoFactory$AbstractBuildInfo.setBuildAttribute(BuildInfoFactory.java:99) org.eclipse.ptp.rdt.core.resources.RemoteMakeNature.configure(RemoteMakeNature.java:183) org.eclipse.core.internal.resources.NatureManager$1.run(NatureManager.java:143) org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) org.eclipse.core.internal.resources.NatureManager.configureNature(NatureManager.java:158) org.eclipse.core.internal.resources.NatureManager.configureNatures(NatureManager.java:203) org.eclipse.core.internal.resources.Project.basicSetDescription(Project.java:86) org.eclipse.core.internal.resources.Project.setDescription(Project.java:1081) org.eclipse.core.internal.resources.Project.setDescription(Project.java:1109) org.eclipse.ptp.rdt.core.resources.RemoteMakeNature.addNature(RemoteMakeNature.java:59) org.eclipse.ptp.rdt.ui.wizards.RemoteMakefileWizardHandler.createProject(RemoteMakefileWizardHandler.java:108) org.eclipse.cdt.ui.wizards.CDTCommonProjectWizard$1$1$1.run(CDTCommonProjectWizard.java:257) org.eclipse.ui.actions.WorkspaceModifyDelegatingOperation.execute(WorkspaceModifyDelegatingOperation.java:69) org.eclipse.ui.actions.WorkspaceModifyOperation$1.run(WorkspaceModifyOperation.java:106) org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1857) org.eclipse.ui.actions.WorkspaceModifyOperation.run(WorkspaceModifyOperation.java:118) org.eclipse.jface.operation.ModalContext.runInCurrentThread(ModalContext.java:464) org.eclipse.jface.operation.ModalContext.run(ModalContext.java:372) org.eclipse.jface.wizard.WizardDialog.run(WizardDialog.java:946) org.eclipse.cdt.ui.wizards.CDTCommonProjectWizard$1$1.run(CDTCommonProjectWizard.java:266) org.eclipse.ui.internal.UILockListener.doPendingWork(UILockListener.java:155) org.eclipse.ui.internal.UISynchronizer$3.run(UISynchronizer.java:158) org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134) org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3487) org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3134) org.eclipse.jface.operation.ModalContext$ModalContextThread.block(ModalContext.java:173) org.eclipse.jface.operation.ModalContext.run(ModalContext.java:388) org.eclipse.jface.wizard.WizardDialog.run(WizardDialog.java:946) org.eclipse.cdt.ui.wizards.CDTCommonProjectWizard.invokeRunnable(CDTCommonProjectWizard.java:179) org.eclipse.cdt.ui.wizards.CDTCommonProjectWizard.getProject(CDTCommonProjectWizard.java:157) org.eclipse.cdt.ui.wizards.CDTCommonProjectWizard.performFinish(CDTCommonProjectWizard.java:195)
By creating an additional class one can make this wrapping rather clean. Now also the canceling should work correctly. private abstract class SftpCallable<T> implements Callable<T> { ChannelSftp sftpChannel = null; private ExecutorService pool = Executors.newSingleThreadExecutor(); /* Function opens sftpChannel and then executes the sftp operation. If run on the main thread it executes it on * a separate thread * * throws Throwable because getCause returns Throwable */ public T callSFTPCmdInThread(String jobName, IProgressMonitor monitor) throws Throwable { Future<T> future = null; T ret = null; boolean bMainThread = false; if (PlatformUI.isWorkbenchRunning() && Thread.currentThread().equals(PlatformUI.getWorkbench().getDisplay().getThread())) bMainThread = true; try { sftpChannel = getSFTPChannel(); if (bMainThread) { future = pool.submit(this); monitor.beginTask(jobName, 1); while (ret==null) { if (monitor.isCanceled()) { future.cancel(true); sftpChannel.quit(); throw new CancelException(); } try { ret = future.get(100,TimeUnit.MILLISECONDS); } catch (InterruptedException e) { Thread.currentThread().interrupt(); //set current thread flag } catch (TimeoutException e) { //ignore } catch (ExecutionException e) { throw e.getCause(); } } monitor.worked(1); } else { ret = this.call(); } } finally { releaseSFTPChannel(sftpChannel); if (monitor != null) monitor.done(); } return ret; } } /** * Read attributes of the remote file. * @param path * @return A Jsch data structure with attributes or null if path does not exist. * @throws RemoteExecutionException */ protected RemoteFileAttributes fetchRemoteAttr(final String path, IProgressMonitor monitor) throws RemoteOperationException, CancelException { // System.out.println("fetchRemoteAttr"); validateRemotePath(path); try { test(); SftpCallable<SftpATTRS> c = new SftpCallable<SftpATTRS>(){ @Override public SftpATTRS call() throws Exception { return sftpChannel.stat(path); } }; SftpATTRS attrs = c.callSFTPCmdInThread("Get file attributes", monitor); return RemoteFileAttributes.getAttributes(attrs); // System.out.println(attrs.toString()); } catch (Throwable e) { //e.printStackTrace(); if (SftpException.class.isInstance(e) && ((SftpException)e).id == ChannelSftp.SSH_FX_NO_SUCH_FILE) { System.out.println("fetchRemoteAttr: no such file"); return null; } throw new RemoteOperationException(e); } }
(In reply to comment #24) > Just something I noticed I would like your opinion on. Below is a stack trace > where Display#syncExec interrupts SFTP execution since we are running on the > main thread. > > What strikes me as a little odd, is that seems that the call to > FileTools.getOutputStream originates from the CDT builder further downstream. > Shouldn't almost any builder not run on the dispatch thread but rather as a job? > Is this potentially a bug? Is this actually building? It looks more like project creation to me. It may be that in the normal CDT project creation most operations are fairly fast or more likely they have never thought about the possibility of remote projects operating over flakey network connections.
(In reply to comment #25) > By creating an additional class one can make this wrapping rather clean. > Now also the canceling should work correctly. Roland, this looks good. Do you have a patch?
Created attachment 157793 [details] Patch including earlier changes + spanning thread if running on main thread This is the preliminary patch for spawning the thread on the main thread. This is for fetchRemoteAttrs and openOutputStream. If you both like this implementation I'll quickly do it for the other methods.
I'm still seeing "no such file" messages from fetchRemoteAttr. Is that expected? GETCHILD: .bash_logout GETCHILD: .bash_profile GETCHILD: .bashrc GETCHILD: .emacs GETCHILD: .xemacs GETCHILD: .pbs_spool GETCHILD: scratch-global GETCHILD: .soft GETCHILD: .soft.cache.csh GETCHILD: .soft.cache.sh GETCHILD: .history GETCHILD: mpqc GETCHILD: .viminfo GETCHILD: ptp GETCHILD: openmpi-1.4a1r21889.tar.gz GETCHILD: openmpi-1.4a1r21889 GETCHILD: ompi GETCHILD: mpqc-2.3.1.tar.bz2 GETCHILD: mpqc-2.3.1 GETCHILD: cblas.tgz GETCHILD: CBLAS GETCHILD: blas_linux.tgz GETCHILD: blas_linux.a GETCHILD: LAPACK GETCHILD: lapack_linux.tgz GETCHILD: lapack_linux.a GETCHILD: make.inc.linux GETCHILD: .ssh GETCHILD: xxx.tar GETCHILD: pbs GETCHILD: shallow GETCHILD: .bash_history GETCHILD: x GETCHILD: test.c GETCHILD: test GETCHILD: xxx GETCHILD: .cvspass GETCHILD: remote GETCHILD: rdt-server-linux-3.0.0.tar GETCHILD: rdt-server GETCHILD: abe_test GETCHILD: .eclipse GETCHILD: sftp_test GETCHILD: remote2 GETCHILD: .eclipsesettings GETCHILD: yyyy FETCHINFO: /u/ac/grw/remote3 fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 fetchRemoteAttr: no such file FETCHINFO: /u/ac/grw/remote3 GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 fetchRemoteAttr: no such file FETCHINFO: /u/ac/grw/remote3 GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project GETPARENT: /u/ac/grw/remote3/.project MKDIR: /u/ac/grw/remote3 fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 drwxr-x--x 41404 202 4096 Mon Feb 01 11:47:34 EST 2010 channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 OPENOUTPUTSTREAM: /u/ac/grw/remote3/.project getOutputStream: append: 0 channelPool.size() -> 3 thread: Thread-0 MyPipedOutputStream.close MyPipedOutputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 FETCHINFO: /u/ac/grw/remote3/.project fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 -rw-r--r-- 41404 14696 199 Mon Feb 01 11:49:33 EST 2010 GETCHILD: .project GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote3/.project channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project OPENOUTPUTSTREAM: /u/ac/grw/remote3/.project getOutputStream: append: 0 channelPool.size() -> 3 thread: Thread-0 MyPipedOutputStream.close MyPipedOutputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 FETCHINFO: /u/ac/grw/remote3/.project fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 -rw-r--r-- 41404 14696 247 Mon Feb 01 11:49:33 EST 2010 GETCHILD: .project GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote3/.project channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project OPENOUTPUTSTREAM: /u/ac/grw/remote3/.project getOutputStream: append: 0 channelPool.size() -> 3 thread: Thread-0 MyPipedOutputStream.close MyPipedOutputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 FETCHINFO: /u/ac/grw/remote3/.project fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 -rw-r--r-- 41404 14696 296 Mon Feb 01 11:49:34 EST 2010 GETCHILD: .project GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote3/.project channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project OPENOUTPUTSTREAM: /u/ac/grw/remote3/.project getOutputStream: append: 0 channelPool.size() -> 3 thread: Thread-0 MyPipedOutputStream.close MyPipedOutputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 FETCHINFO: /u/ac/grw/remote3/.project fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 -rw-r--r-- 41404 14696 353 Mon Feb 01 11:49:34 EST 2010 GETCHILD: .project GETCHILD: .cproject FETCHINFO: /u/ac/grw/remote3/.cproject fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 fetchRemoteAttr: no such file GETCHILD: .cproject FETCHINFO: /u/ac/grw/remote3/.cproject GETCHILD: .cdtproject FETCHINFO: /u/ac/grw/remote3/.cdtproject fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 fetchRemoteAttr: no such file GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote3/.project channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project OPENOUTPUTSTREAM: /u/ac/grw/remote3/.project getOutputStream: append: 0 channelPool.size() -> 3 thread: Thread-0 MyPipedOutputStream.close MyPipedOutputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 FETCHINFO: /u/ac/grw/remote3/.project fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 -rw-r--r-- 41404 14696 635 Mon Feb 01 11:49:36 EST 2010 GETCHILD: .project GETPARENT: /u/ac/grw/remote3 GETPARENT: /u/ac/grw GETPARENT: /u/ac GETPARENT: /u GETPARENT: / GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote3/.project channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project OPENOUTPUTSTREAM: /u/ac/grw/remote3/.project getOutputStream: append: 0 channelPool.size() -> 3 thread: Thread-0 MyPipedOutputStream.close MyPipedOutputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 FETCHINFO: /u/ac/grw/remote3/.project fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 -rw-r--r-- 41404 14696 774 Mon Feb 01 11:49:37 EST 2010 GETCHILD: .project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote3/.project channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote3/.project channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project OPENOUTPUTSTREAM: /u/ac/grw/remote3/.project getOutputStream: append: 0 channelPool.size() -> 3 thread: Thread-0 MyPipedOutputStream.close MyPipedOutputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 FETCHINFO: /u/ac/grw/remote3/.project fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 -rw-r--r-- 41404 14696 2348 Mon Feb 01 11:49:37 EST 2010 GETCHILD: .project GETCHILD: .cproject GETCHILD: .cproject FETCHINFO: /u/ac/grw/remote3/.cproject FETCHINFO: /u/ac/grw/remote3 fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 drwxr-xr-x 41404 14696 4096 Mon Feb 01 11:49:33 EST 2010 GETCHILD: .cproject FETCHINFO: /u/ac/grw/remote3/.cproject GETCHILD: .cproject GETPARENT: /u/ac/grw/remote3/.cproject MKDIR: /u/ac/grw/remote3 OPENOUTPUTSTREAM: /u/ac/grw/remote3/.cproject getOutputStream: append: 0 channelPool.size() -> 3 thread: Thread-0 MyPipedOutputStream.close MyPipedOutputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 FETCHINFO: /u/ac/grw/remote3/.cproject fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 -rw-r--r-- 41404 14696 12165 Mon Feb 01 11:49:38 EST 2010 GETCHILD: .cproject GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote3/.project channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project OPENOUTPUTSTREAM: /u/ac/grw/remote3/.project getOutputStream: append: 0 channelPool.size() -> 3 thread: Thread-0 MyPipedOutputStream.close MyPipedOutputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 FETCHINFO: /u/ac/grw/remote3/.project fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 -rw-r--r-- 41404 14696 502 Mon Feb 01 11:49:38 EST 2010 GETCHILD: .project GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote3/.project channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project OPENOUTPUTSTREAM: /u/ac/grw/remote3/.project getOutputStream: append: 0 channelPool.size() -> 3 thread: Thread-0 MyPipedOutputStream.close MyPipedOutputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 FETCHINFO: /u/ac/grw/remote3/.project fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 -rw-r--r-- 41404 14696 627 Mon Feb 01 11:49:39 EST 2010 GETCHILD: .project GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote3/.project channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project OPENOUTPUTSTREAM: /u/ac/grw/remote3/.project getOutputStream: append: 0 channelPool.size() -> 3 thread: Thread-0 MyPipedOutputStream.close MyPipedOutputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 FETCHINFO: /u/ac/grw/remote3/.project fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 -rw-r--r-- 41404 14696 827 Mon Feb 01 11:49:39 EST 2010 GETCHILD: .project GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote3/.project channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project OPENOUTPUTSTREAM: /u/ac/grw/remote3/.project getOutputStream: append: 0 channelPool.size() -> 3 thread: Thread-0 MyPipedOutputStream.close MyPipedOutputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 FETCHINFO: /u/ac/grw/remote3/.project fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 -rw-r--r-- 41404 14696 943 Mon Feb 01 11:49:40 EST 2010 GETCHILD: .project GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote3/.project channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project OPENOUTPUTSTREAM: /u/ac/grw/remote3/.project getOutputStream: append: 0 channelPool.size() -> 3 thread: Thread-0 MyPipedOutputStream.close MyPipedOutputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 FETCHINFO: /u/ac/grw/remote3/.project fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 -rw-r--r-- 41404 14696 1064 Mon Feb 01 11:49:40 EST 2010 GETCHILD: .project GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote3/.project channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project OPENOUTPUTSTREAM: /u/ac/grw/remote3/.project getOutputStream: append: 0 channelPool.size() -> 3 thread: Thread-0 MyPipedOutputStream.close MyPipedOutputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 FETCHINFO: /u/ac/grw/remote3/.project fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 -rw-r--r-- 41404 14696 1179 Mon Feb 01 11:49:41 EST 2010 GETCHILD: .project GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote3/.project channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project OPENOUTPUTSTREAM: /u/ac/grw/remote3/.project getOutputStream: append: 0 channelPool.size() -> 3 thread: Thread-0 MyPipedOutputStream.close MyPipedOutputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 FETCHINFO: /u/ac/grw/remote3/.project fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 -rw-r--r-- 41404 14696 1298 Mon Feb 01 11:49:41 EST 2010 GETCHILD: .project GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote3/.project channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project OPENOUTPUTSTREAM: /u/ac/grw/remote3/.project getOutputStream: append: 0 channelPool.size() -> 3 thread: Thread-0 MyPipedOutputStream.close MyPipedOutputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 FETCHINFO: /u/ac/grw/remote3/.project fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 -rw-r--r-- 41404 14696 1417 Mon Feb 01 11:49:42 EST 2010 GETCHILD: .project GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote3/.project channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project OPENOUTPUTSTREAM: /u/ac/grw/remote3/.project getOutputStream: append: 0 channelPool.size() -> 3 thread: Thread-0 MyPipedOutputStream.close MyPipedOutputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 FETCHINFO: /u/ac/grw/remote3/.project fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 -rw-r--r-- 41404 14696 1555 Mon Feb 01 11:49:42 EST 2010 GETCHILD: .project GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote3/.project channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project OPENOUTPUTSTREAM: /u/ac/grw/remote3/.project getOutputStream: append: 0 channelPool.size() -> 3 thread: Thread-0 MyPipedOutputStream.close MyPipedOutputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 FETCHINFO: /u/ac/grw/remote3/.project fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 -rw-r--r-- 41404 14696 1673 Mon Feb 01 11:49:42 EST 2010 GETCHILD: .project GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote3/.project channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project OPENOUTPUTSTREAM: /u/ac/grw/remote3/.project getOutputStream: append: 0 channelPool.size() -> 3 thread: Thread-0 MyPipedOutputStream.close MyPipedOutputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 FETCHINFO: /u/ac/grw/remote3/.project fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 -rw-r--r-- 41404 14696 1796 Mon Feb 01 11:49:43 EST 2010 GETCHILD: .project GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote3/.project channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project OPENOUTPUTSTREAM: /u/ac/grw/remote3/.project getOutputStream: append: 0 channelPool.size() -> 3 thread: Thread-0 MyPipedOutputStream.close MyPipedOutputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 FETCHINFO: /u/ac/grw/remote3/.project fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 -rw-r--r-- 41404 14696 1921 Mon Feb 01 11:49:43 EST 2010 GETCHILD: .project GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote3/.project channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project OPENOUTPUTSTREAM: /u/ac/grw/remote3/.project getOutputStream: append: 0 channelPool.size() -> 3 thread: Thread-0 MyPipedOutputStream.close MyPipedOutputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 FETCHINFO: /u/ac/grw/remote3/.project fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 -rw-r--r-- 41404 14696 2043 Mon Feb 01 11:49:44 EST 2010 GETCHILD: .project GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote3/.project channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project OPENOUTPUTSTREAM: /u/ac/grw/remote3/.project getOutputStream: append: 0 channelPool.size() -> 3 thread: Thread-0 MyPipedOutputStream.close MyPipedOutputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 FETCHINFO: /u/ac/grw/remote3/.project fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 -rw-r--r-- 41404 14696 2372 Mon Feb 01 11:49:44 EST 2010 GETCHILD: .project GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote3/.project channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project OPENOUTPUTSTREAM: /u/ac/grw/remote3/.project getOutputStream: append: 0 channelPool.size() -> 3 thread: Thread-0 MyPipedOutputStream.close MyPipedOutputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 FETCHINFO: /u/ac/grw/remote3/.project fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 -rw-r--r-- 41404 14696 2493 Mon Feb 01 11:49:45 EST 2010 GETCHILD: .project GETPARENT: /u/ac/grw/remote3 GETPARENT: /u/ac/grw GETPARENT: /u/ac GETPARENT: /u GETPARENT: / GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote3/.project channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project OPENOUTPUTSTREAM: /u/ac/grw/remote3/.project getOutputStream: append: 0 channelPool.size() -> 3 thread: Thread-0 MyPipedOutputStream.close MyPipedOutputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 FETCHINFO: /u/ac/grw/remote3/.project fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 -rw-r--r-- 41404 14696 2603 Mon Feb 01 11:49:45 EST 2010 GETCHILD: .project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote3/.project channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 GETCHILD: .cproject FETCHINFO: /u/ac/grw/remote3/.cproject GETCHILD: .cproject FETCHINFO: /u/ac/grw/remote3/.cproject GETCHILD: .cproject FETCHINFO: /u/ac/grw/remote3/.cproject GETCHILD: .cproject OPENOUTPUTSTREAM: /u/ac/grw/remote3/.cproject getOutputStream: append: 0 channelPool.size() -> 3 thread: Thread-0 MyPipedOutputStream.close MyPipedOutputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 FETCHINFO: /u/ac/grw/remote3/.cproject fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 -rw-r--r-- 41404 14696 12195 Mon Feb 01 11:49:46 EST 2010 GETCHILD: .cproject FETCHINFO: /u/ac/grw/remote3 channelPool.size() -> 3 thread: Worker-7 release, channelPool.size() -> 2 thread: Worker-7 GETCHILD: .settings GETCHILD: .settings FETCHINFO: /u/ac/grw/remote3/.settings fetchRemoteAttr channelPool.size() -> 3 thread: Worker-10 release, channelPool.size() -> 2 thread: Worker-10 fetchRemoteAttr: no such file GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote2/.project
(In reply to comment #29) > I'm still seeing "no such file" messages from fetchRemoteAttr. Is that > expected? In this case it should be OK. Because they are all before the respective mkdir/openOutputStream. Thus these files are really not there yet. And this is not an error. But just debug output saying when a file is not there.
Ok. I created a few remote projects to test the patch, but got an exception which caused the UI to deadlock: GETCHILD: .bash_logout GETCHILD: .bash_profile GETCHILD: .bashrc GETCHILD: .emacs GETCHILD: .xemacs GETCHILD: .pbs_spool GETCHILD: scratch-global GETCHILD: .soft GETCHILD: .soft.cache.csh GETCHILD: .soft.cache.sh GETCHILD: .history GETCHILD: mpqc GETCHILD: .viminfo GETCHILD: ptp GETCHILD: openmpi-1.4a1r21889.tar.gz GETCHILD: openmpi-1.4a1r21889 GETCHILD: ompi GETCHILD: mpqc-2.3.1.tar.bz2 GETCHILD: mpqc-2.3.1 GETCHILD: cblas.tgz GETCHILD: CBLAS GETCHILD: blas_linux.tgz GETCHILD: blas_linux.a GETCHILD: LAPACK GETCHILD: lapack_linux.tgz GETCHILD: lapack_linux.a GETCHILD: make.inc.linux GETCHILD: .ssh GETCHILD: xxx.tar GETCHILD: pbs GETCHILD: shallow GETCHILD: .bash_history GETCHILD: x GETCHILD: test.c GETCHILD: test GETCHILD: xxx GETCHILD: .cvspass GETCHILD: remote GETCHILD: rdt-server-linux-3.0.0.tar GETCHILD: rdt-server GETCHILD: abe_test GETCHILD: .eclipse GETCHILD: sftp_test GETCHILD: remote2 GETCHILD: .eclipsesettings GETCHILD: yyyy FETCHINFO: /u/ac/grw/remote3 fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 fetchRemoteAttr: no such file FETCHINFO: /u/ac/grw/remote3 GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 fetchRemoteAttr: no such file FETCHINFO: /u/ac/grw/remote3 GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project GETPARENT: /u/ac/grw/remote3/.project MKDIR: /u/ac/grw/remote3 fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 drwxr-x--x 41404 202 4096 Mon Feb 01 12:35:59 EST 2010 channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 OPENOUTPUTSTREAM: /u/ac/grw/remote3/.project getOutputStream: append: 0 channelPool.size() -> 3 thread: Thread-0 MyPipedOutputStream.close MyPipedOutputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 FETCHINFO: /u/ac/grw/remote3/.project fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 -rw-r--r-- 41404 14696 200 Mon Feb 01 12:36:39 EST 2010 GETCHILD: .project GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote3/.project channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project OPENOUTPUTSTREAM: /u/ac/grw/remote3/.project getOutputStream: append: 0 channelPool.size() -> 3 thread: Thread-0 MyPipedOutputStream.close MyPipedOutputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 FETCHINFO: /u/ac/grw/remote3/.project fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 -rw-r--r-- 41404 14696 248 Mon Feb 01 12:36:40 EST 2010 GETCHILD: .project GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote3/.project channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project OPENOUTPUTSTREAM: /u/ac/grw/remote3/.project getOutputStream: append: 0 channelPool.size() -> 3 thread: Thread-0 MyPipedOutputStream.close MyPipedOutputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 FETCHINFO: /u/ac/grw/remote3/.project fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 -rw-r--r-- 41404 14696 297 Mon Feb 01 12:36:41 EST 2010 GETCHILD: .project GETPARENT: /u/ac/grw/remote3 GETPARENT: /u/ac/grw GETPARENT: /u/ac GETPARENT: /u GETPARENT: / GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote3/.project channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project OPENOUTPUTSTREAM: /u/ac/grw/remote3/.project getOutputStream: append: 0 channelPool.size() -> 3 thread: Thread-0 MyPipedOutputStream.close MyPipedOutputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 FETCHINFO: /u/ac/grw/remote3/.project fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 -rw-r--r-- 41404 14696 354 Mon Feb 01 12:36:42 EST 2010 GETCHILD: .project GETCHILD: .cproject FETCHINFO: /u/ac/grw/remote3/.cproject fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 fetchRemoteAttr: no such file GETCHILD: .cproject FETCHINFO: /u/ac/grw/remote3/.cproject GETCHILD: .cdtproject FETCHINFO: /u/ac/grw/remote3/.cdtproject GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote3/.project channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project OPENOUTPUTSTREAM: /u/ac/grw/remote3/.project getOutputStream: append: 0 channelPool.size() -> 3 thread: Thread-0 MyPipedOutputStream.close MyPipedOutputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 FETCHINFO: /u/ac/grw/remote3/.project fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 -rw-r--r-- 41404 14696 636 Mon Feb 01 12:36:45 EST 2010 GETCHILD: .project GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote3/.project channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project OPENOUTPUTSTREAM: /u/ac/grw/remote3/.project getOutputStream: append: 0 channelPool.size() -> 3 thread: Thread-0 MyPipedOutputStream.close MyPipedOutputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 FETCHINFO: /u/ac/grw/remote3/.project fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 -rw-r--r-- 41404 14696 775 Mon Feb 01 12:36:45 EST 2010 GETCHILD: .project GETPARENT: /u/ac/grw/remote3 GETPARENT: /u/ac/grw GETPARENT: /u/ac GETPARENT: /u GETPARENT: / GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote3/.project channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote3/.project channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project OPENOUTPUTSTREAM: /u/ac/grw/remote3/.project getOutputStream: append: 0 channelPool.size() -> 3 thread: Thread-0 MyPipedOutputStream.close MyPipedOutputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 FETCHINFO: /u/ac/grw/remote3/.project fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 -rw-r--r-- 41404 14696 2349 Mon Feb 01 12:36:47 EST 2010 GETCHILD: .project GETCHILD: .cproject GETCHILD: .cproject FETCHINFO: /u/ac/grw/remote3/.cproject FETCHINFO: /u/ac/grw/remote3 fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 drwxr-xr-x 41404 14696 4096 Mon Feb 01 12:36:38 EST 2010 GETCHILD: .cproject FETCHINFO: /u/ac/grw/remote3/.cproject GETCHILD: .cproject GETPARENT: /u/ac/grw/remote3/.cproject MKDIR: /u/ac/grw/remote3 OPENOUTPUTSTREAM: /u/ac/grw/remote3/.cproject getOutputStream: append: 0 channelPool.size() -> 3 thread: Thread-0 MyPipedOutputStream.close MyPipedOutputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 FETCHINFO: /u/ac/grw/remote3/.cproject fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 -rw-r--r-- 41404 14696 12173 Mon Feb 01 12:36:48 EST 2010 GETCHILD: .cproject GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote3/.project channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project OPENOUTPUTSTREAM: /u/ac/grw/remote3/.project getOutputStream: append: 0 channelPool.size() -> 3 thread: Thread-0 MyPipedOutputStream.close MyPipedOutputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 FETCHINFO: /u/ac/grw/remote3/.project fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 -rw-r--r-- 41404 14696 503 Mon Feb 01 12:36:49 EST 2010 GETCHILD: .project GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote3/.project channelPool.size() -> 3 thread: Thread-0 OPENINPUTSTREAM: null GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project OPENOUTPUTSTREAM: /u/ac/grw/remote3/.project getOutputStream: append: 0 channelPool.size() -> 3 thread: Thread-0 MyPipedOutputStream.close java.lang.InterruptedException at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireInterruptibly(AbstractQueuedSynchronizer.java:1135) at java.util.concurrent.locks.ReentrantLock.lockInterruptibly(ReentrantLock.java:312) at java.util.concurrent.ArrayBlockingQueue.take(ArrayBlockingQueue.java:313) at org.eclipse.ptp.remotetools.internal.ssh.Connection.getSFTPChannel(Connection.java:639) at org.eclipse.ptp.remotetools.internal.ssh.FileTools.getSFTPChannel(FileTools.java:67) at org.eclipse.ptp.remotetools.internal.ssh.FileTools.getInputStream(FileTools.java:298) at org.eclipse.ptp.remote.remotetools.core.RemoteToolsFileStore.openInputStream(RemoteToolsFileStore.java:322) at org.eclipse.core.internal.localstore.FileSystemResourceManager.read(FileSystemResourceManager.java:689) at org.eclipse.core.internal.resources.File.getContents(File.java:293) at org.eclipse.core.internal.localstore.FileSystemResourceManager.descriptionChanged(FileSystemResourceManager.java:274) at org.eclipse.core.internal.localstore.FileSystemResourceManager.internalWrite(FileSystemResourceManager.java:535) at org.eclipse.core.internal.resources.Project.writeDescription(Project.java:1196) at org.eclipse.core.internal.resources.Project.setDescription(Project.java:1085) at org.eclipse.core.internal.resources.Project.setDescription(Project.java:1109) at org.eclipse.ptp.rdt.core.resources.RemoteMakeNature.addToBuildSpec(RemoteMakeNature.java:138) at org.eclipse.ptp.rdt.ui.wizards.RemoteMakefileWizardHandler.createProject(RemoteMakefileWizardHandler.java:107) at org.eclipse.cdt.ui.wizards.CDTCommonProjectWizard$1$1$1.run(CDTCommonProjectWizard.java:257) at org.eclipse.ui.actions.WorkspaceModifyDelegatingOperation.execute(WorkspaceModifyDelegatingOperation.java:69) at org.eclipse.ui.actions.WorkspaceModifyOperation$1.run(WorkspaceModifyOperation.java:106) at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1982) at org.eclipse.ui.actions.WorkspaceModifyOperation.run(WorkspaceModifyOperation.java:118) at org.eclipse.jface.operation.ModalContext.runInCurrentThread(ModalContext.java:464) at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:372) at org.eclipse.jface.wizard.WizardDialog.run(WizardDialog.java:944) at org.eclipse.cdt.ui.wizards.CDTCommonProjectWizard$1$1.run(CDTCommonProjectWizard.java:266) at org.eclipse.ui.internal.UILockListener.doPendingWork(UILockListener.java:155) at org.eclipse.ui.internal.UISynchronizer$3.run(UISynchronizer.java:158) at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134) at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3530) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3226) at org.eclipse.jface.operation.ModalContext$ModalContextThread.block(ModalContext.java:173) at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:388) at org.eclipse.jface.wizard.WizardDialog.run(WizardDialog.java:944) at org.eclipse.cdt.ui.wizards.CDTCommonProjectWizard.invokeRunnable(CDTCommonProjectWizard.java:179) at org.eclipse.cdt.ui.wizards.CDTCommonProjectWizard.getProject(CDTCommonProjectWizard.java:157) at org.eclipse.cdt.ui.wizards.CDTCommonProjectWizard.performFinish(CDTCommonProjectWizard.java:195) at org.eclipse.jface.wizard.WizardDialog.finishPressed(WizardDialog.java:752) at org.eclipse.jface.wizard.WizardDialog.buttonPressed(WizardDialog.java:373) at org.eclipse.jface.dialogs.Dialog$2.widgetSelected(Dialog.java:624) at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:228) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) at org.eclipse.swt.widgets.Display.sendEvent(Display.java:3706) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1314) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1337) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1322) at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1136) at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3566) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3224) at org.eclipse.jface.window.Window.runEventLoop(Window.java:825) at org.eclipse.jface.window.Window.open(Window.java:801) at org.eclipse.ui.internal.navigator.wizards.WizardShortcutAction.run(WizardShortcutAction.java:98) at org.eclipse.jface.action.Action.runWithEvent(Action.java:498) at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:584) at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:501) at org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:411) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) at org.eclipse.swt.widgets.Display.sendEvent(Display.java:3706) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1314) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1337) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1322) at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1136) at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3566) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3224) at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2407) at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2371) at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2220) at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:493) at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:115) at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:367) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) 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.eclipse.equinox.launcher.Main.invokeFramework(Main.java:611) at org.eclipse.equinox.launcher.Main.basicRun(Main.java:566) at org.eclipse.equinox.launcher.Main.run(Main.java:1363) at org.eclipse.equinox.launcher.Main.main(Main.java:1339) MyPipedOutputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 FETCHINFO: /u/ac/grw/remote3/.project fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 -rw-r--r-- 41404 14696 628 Mon Feb 01 12:36:51 EST 2010 GETCHILD: .project GETPARENT: /u/ac/grw/remote3 GETPARENT: /u/ac/grw GETPARENT: /u/ac GETPARENT: /u GETPARENT: / GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote3/.project channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 GETCHILD: .project FETCHINFO: /u/ac/grw/remote3/.project GETCHILD: .project OPENOUTPUTSTREAM: /u/ac/grw/remote3/.project getOutputStream: append: 0 channelPool.size() -> 3 thread: Thread-0 MyPipedOutputStream.close
(In reply to comment #31) > Ok. I created a few remote projects to test the patch, but got an exception > which caused the UI to deadlock: This InterruptedExecption is in getInputStream. I only have done fetchRemoteAttr and openOutputStream so far. So this is the known InterruptedExecption problem for the methods I haven't done so far. I haven't done all yet, because I wasn't quite sure whether I did it in a good way and thus was waiting on feedback from you and Dieter and how to improve it.
Oh, ok. It looks good to me. Some minor suggestions: change syncSFTPCmdInThread, etc. to syncExec, asyncExec, waitForCompletion, finalize, etc. or something more generic. Also, if asyncSFTPCmdInThread is public, then waitSFTPCmdInThread should be also.
(In reply to comment #26) > (In reply to comment #24) > > Just something I noticed I would like your opinion on. Below is a stack trace > > where Display#syncExec interrupts SFTP execution since we are running on the > > main thread. > > > > What strikes me as a little odd, is that seems that the call to > > FileTools.getOutputStream originates from the CDT builder further downstream. > > Shouldn't almost any builder not run on the dispatch thread but rather as a job? > > Is this potentially a bug? > > Is this actually building? It looks more like project creation to me. It may be > that in the normal CDT project creation most operations are fairly fast or more > likely they have never thought about the possibility of remote projects > operating over flakey network connections. Should we get the opinion of CDT developers whether this is something we should write a bug report for? Or just write a bug report to get feedback this way?
(In reply to comment #34) > (In reply to comment #26) > > (In reply to comment #24) > > > Just something I noticed I would like your opinion on. Below is a stack > trace > > > where Display#syncExec interrupts SFTP execution since we are running on the > > > main thread. > > > > > > What strikes me as a little odd, is that seems that the call to > > > FileTools.getOutputStream originates from the CDT builder further > downstream. > > > Shouldn't almost any builder not run on the dispatch thread but rather as a > job? > > > Is this potentially a bug? > > > > Is this actually building? It looks more like project creation to me. It may > be > > that in the normal CDT project creation most operations are fairly fast or > more > > likely they have never thought about the possibility of remote projects > > operating over flakey network connections. > > > Should we get the opinion of CDT developers whether this is something we should > write a bug report for? Or just write a bug report to get feedback this way? If you could demonstrate that this is a problem likely to affect CDT projects generally, then it would probably be worth opening a bug. Otherwise I suspect it would be better to open a bug against RDT rather than CDT, since the CDT people will just argue that this is a problem introduced by remote enabling the project.
Created attachment 157843 [details] Patch including earlier changes + spanning thread if running on main thread v2 This is the patch which creates a new thread whenever running on the main thread. It seams to work for me but I have to leave for a meeting - so I didn't have much time to test it. Thus if you have time please do some testing. Hopefully we have now a completely correctly working remotetools :-) Do you want to apply this to the 3 branch? If so I can also make a patch against this. I already made this patch to not modify any interface. The only disadvantage this has is that in CopyTools I have the hack: remoteFileTools = (FileTools)manager.getRemoteFileTools(); //TODO update interface
I'm getting a UI deadlock when I create a new project. Here's an example of where it's happening for me, though it seems to be different locations: GETCHILD: .bash_logout GETCHILD: .bash_profile GETCHILD: .bashrc GETCHILD: .emacs GETCHILD: .xemacs GETCHILD: .pbs_spool GETCHILD: scratch-global GETCHILD: .soft GETCHILD: .soft.cache.csh GETCHILD: .soft.cache.sh GETCHILD: .history GETCHILD: mpqc GETCHILD: .viminfo GETCHILD: ptp GETCHILD: openmpi-1.4a1r21889.tar.gz GETCHILD: openmpi-1.4a1r21889 GETCHILD: ompi GETCHILD: mpqc-2.3.1.tar.bz2 GETCHILD: mpqc-2.3.1 GETCHILD: cblas.tgz GETCHILD: CBLAS GETCHILD: blas_linux.tgz GETCHILD: blas_linux.a GETCHILD: LAPACK GETCHILD: lapack_linux.tgz GETCHILD: lapack_linux.a GETCHILD: make.inc.linux GETCHILD: .ssh GETCHILD: xxx.tar GETCHILD: pbs GETCHILD: shallow GETCHILD: .bash_history GETCHILD: x GETCHILD: test.c GETCHILD: test GETCHILD: xxx GETCHILD: .cvspass GETCHILD: remote GETCHILD: rdt-server-linux-3.0.0.tar GETCHILD: rdt-server GETCHILD: abe_test GETCHILD: .eclipse GETCHILD: sftp_test GETCHILD: remote3 GETCHILD: .eclipsesettings GETCHILD: yyyy FETCHINFO: /u/ac/grw/remote4 fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 fetchRemoteAttr: no such file FETCHINFO: /u/ac/grw/remote4 GETCHILD: .project FETCHINFO: /u/ac/grw/remote4/.project fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 fetchRemoteAttr: no such file FETCHINFO: /u/ac/grw/remote4 GETCHILD: .project FETCHINFO: /u/ac/grw/remote4/.project GETCHILD: .project GETPARENT: /u/ac/grw/remote4/.project MKDIR: /u/ac/grw/remote4 fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 drwxr-x--x 41404 202 4096 Mon Feb 01 16:38:39 EST 2010 channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 OPENOUTPUTSTREAM: /u/ac/grw/remote4/.project getOutputStream: append: 0 channelPool.size() -> 3 thread: Thread-0 MyPipedOutputStream.close MyPipedOutputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 FETCHINFO: /u/ac/grw/remote4/.project fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 -rw-r--r-- 41404 14696 200 Mon Feb 01 16:39:10 EST 2010 GETCHILD: .project GETCHILD: .project FETCHINFO: /u/ac/grw/remote4/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote4/.project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote4/.project channelPool.size() -> 3 thread: Thread-0 MyPipedInputStream.close MyPipedInputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 GETCHILD: .project FETCHINFO: /u/ac/grw/remote4/.project GETCHILD: .project OPENOUTPUTSTREAM: /u/ac/grw/remote4/.project getOutputStream: append: 0 channelPool.size() -> 3 thread: Thread-0 MyPipedOutputStream.close MyPipedOutputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 FETCHINFO: /u/ac/grw/remote4/.project fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 -rw-r--r-- 41404 14696 248 Mon Feb 01 16:39:11 EST 2010 GETCHILD: .project GETCHILD: .project FETCHINFO: /u/ac/grw/remote4/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote4/.project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote4/.project channelPool.size() -> 3 thread: Thread-0 MyPipedInputStream.close MyPipedInputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 GETCHILD: .project FETCHINFO: /u/ac/grw/remote4/.project GETCHILD: .project OPENOUTPUTSTREAM: /u/ac/grw/remote4/.project getOutputStream: append: 0 channelPool.size() -> 3 thread: Thread-0 MyPipedOutputStream.close MyPipedOutputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 FETCHINFO: /u/ac/grw/remote4/.project fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 -rw-r--r-- 41404 14696 297 Mon Feb 01 16:39:12 EST 2010 GETCHILD: .project GETCHILD: .project FETCHINFO: /u/ac/grw/remote4/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote4/.project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote4/.project channelPool.size() -> 3 thread: Thread-0 MyPipedInputStream.close MyPipedInputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 GETCHILD: .project FETCHINFO: /u/ac/grw/remote4/.project GETCHILD: .project OPENOUTPUTSTREAM: /u/ac/grw/remote4/.project getOutputStream: append: 0 channelPool.size() -> 3 thread: Thread-0 MyPipedOutputStream.close
Here's the stack: Daemon Thread [Thread-0] (Suspended) Unsafe.park(boolean, long) line: not available [native method] LockSupport.park(Object) line: 158 AbstractQueuedSynchronizer$ConditionObject.await() line: 1925 ArrayBlockingQueue<E>.put(E) line: 252 Connection.releaseSFTPChannel(ChannelSftp) line: 661 FileTools.releaseSFTPChannel(ChannelSftp) line: 66 FileTools.access$0(FileTools, ChannelSftp) line: 65 FileTools$3(FileTools$SftpCallable<T>).finalizeCmdInThread(IProgressMonitor) line: 732 FileTools$SftpCallable<T>.access$0(FileTools$SftpCallable, IProgressMonitor) line: 731 FileTools$MyPipedInputStream<T>.close() line: 438 XmlProjectDescriptionStorage.createStorage(IContainer, String, boolean, boolean, boolean) line: 636 XmlProjectDescriptionStorage.loadProjectDescription(IProject) line: 429 XmlProjectDescriptionStorage.getProjectDescription(int, IProgressMonitor) line: 196 CProjectDescriptionManager.getProjectDescription(IProject, int) line: 404 CProjectDescriptionManager.getProjectDescription(IProject, boolean, boolean) line: 397 CProjectDescriptionManager.getProjectDescription(IProject, boolean) line: 390 CProject.computeSourceRoots() line: 603 CProject.computeChildren(OpenableInfo, IResource) line: 624 CProject.buildStructure(OpenableInfo, IProgressMonitor, Map<ICElement,CElementInfo>, IResource) line: 588 CProject(Openable).generateInfos(CElementInfo, Map<ICElement,CElementInfo>, IProgressMonitor) line: 269 CProject(CElement).openWhenClosed(CElementInfo, IProgressMonitor) line: 430 CProject(CElement).getElementInfo(IProgressMonitor) line: 309 CProject(CElement).getElementInfo() line: 299 CProject(Parent).getChildren() line: 55 CProject.getSourceRoots() line: 480 CModelManager.create(IFile, ICProject) line: 317 CModelManager.create(IResource, ICProject) line: 245 DeltaProcessor.createElement(IResource) line: 88 DeltaProcessor.traverseDelta(ICElement, IResourceDelta) line: 457 DeltaProcessor.traverseDelta(ICElement, IResourceDelta) line: 478 DeltaProcessor.processResourceDelta(IResourceDelta) line: 435 CModelManager.resourceChanged(IResourceChangeEvent) line: 866 NotificationManager$2.run() line: 291 SafeRunner.run(ISafeRunnable) line: 42 NotificationManager.notify(ResourceChangeListenerList$ListenerEntry[], IResourceChangeEvent, boolean) line: 285 NotificationManager.broadcastChanges(ElementTree, ResourceChangeEvent, boolean) line: 149 Workspace.broadcastPostChange() line: 329 Workspace.endOperation(ISchedulingRule, boolean, IProgressMonitor) line: 1188 File.setContents(InputStream, int, IProgressMonitor) line: 369 XmlProjectDescriptionStorage.serialize(IContainer, String, ICStorageElement) line: 524 XmlProjectDescriptionStorage$DesSerializationRunnable.run(IProgressMonitor) line: 137 CProjectDescriptionManager$CompositeWorkspaceRunnable.run(IProgressMonitor) line: 198 CProjectDescriptionManager$CompositeWorkspaceRunnable.run(IProgressMonitor) line: 198 CProjectDescriptionManager$5.run(IProgressMonitor) line: 496 Workspace.run(IWorkspaceRunnable, ISchedulingRule, int, IProgressMonitor) line: 1982 CProjectDescriptionManager.runAtomic(IWorkspaceRunnable, ISchedulingRule, IProgressMonitor) line: 493 CProjectDescriptionManager.runWspModification(IWorkspaceRunnable, ISchedulingRule, IProgressMonitor) line: 458 SetCProjectDescriptionOperation.executeOperation() line: 156 SetCProjectDescriptionOperation(CModelOperation).execute() line: 338 SetCProjectDescriptionOperation(CModelOperation).run(IProgressMonitor) line: 603 Workspace.run(IWorkspaceRunnable, ISchedulingRule, int, IProgressMonitor) line: 1982 SetCProjectDescriptionOperation(CModelOperation).runOperation(IProgressMonitor) line: 635 XmlProjectDescriptionStorage(AbstractCProjectDescriptionStorage).setProjectDescription(ICProjectDescription, int, IProgressMonitor) line: 203 CProjectDescriptionStorageManager.setProjectDescription(IProject, ICProjectDescription, int, IProgressMonitor) line: 143 CProjectDescriptionManager.setProjectDescription(IProject, ICProjectDescription, int, IProgressMonitor) line: 814 BuildSettingsUtil.checkApplyDescription(IProject, ICProjectDescription, boolean) line: 210 BuildSettingsUtil.checkApplyDescription(IProject, ICProjectDescription) line: 197 ManagedBuildManager.updateBuildInfo(IProject, boolean) line: 1501 ManagedBuildManager.saveBuildInfo(IProject, boolean) line: 1458 RemoteMakefileWizardHandler.createProject(IProject, boolean, boolean, IProgressMonitor) line: 122 CDTCommonProjectWizard$1$1$1.run(IProgressMonitor) line: 257 WorkspaceModifyDelegatingOperation.execute(IProgressMonitor) line: 69 WorkspaceModifyOperation$1.run(IProgressMonitor) line: 106 Workspace.run(IWorkspaceRunnable, ISchedulingRule, int, IProgressMonitor) line: 1982 WorkspaceModifyDelegatingOperation(WorkspaceModifyOperation).run(IProgressMonitor) line: 118 ModalContext.runInCurrentThread(IRunnableWithProgress, IProgressMonitor) line: 464 ModalContext.run(IRunnableWithProgress, boolean, IProgressMonitor, Display) line: 372 WizardDialog.run(boolean, boolean, IRunnableWithProgress) line: 944 CDTCommonProjectWizard$1$1.run() line: 266 UILockListener.doPendingWork() line: 155 UISynchronizer$3.run() line: 158 RunnableLock.run() line: 35 UISynchronizer(Synchronizer).runAsyncMessages(boolean) line: 134 Display.runAsyncMessages(boolean) line: 3530 Display.readAndDispatch() line: 3226 ModalContext$ModalContextThread.block() line: 173 ModalContext.run(IRunnableWithProgress, boolean, IProgressMonitor, Display) line: 388 WizardDialog.run(boolean, boolean, IRunnableWithProgress) line: 944 NewRemoteCppProjectWizard(CDTCommonProjectWizard).invokeRunnable(IRunnableWithProgress) line: 179 NewRemoteCppProjectWizard(CDTCommonProjectWizard).getProject(boolean, boolean) line: 157 NewRemoteCppProjectWizard(CDTCommonProjectWizard).performFinish() line: 195 WizardDialog.finishPressed() line: 752 WizardDialog.buttonPressed(int) line: 373 Dialog$2.widgetSelected(SelectionEvent) line: 624 TypedListener.handleEvent(Event) line: 228 EventTable.sendEvent(Event) line: 84 Display.sendEvent(EventTable, Event) line: 3706 Button(Widget).sendEvent(Event) line: 1314 Button(Widget).sendEvent(int, Event, boolean) line: 1337 Button(Widget).sendEvent(int, Event) line: 1322 Button(Widget).notifyListeners(int, Event) line: 1136 Display.runDeferredEvents() line: 3566 Display.readAndDispatch() line: 3224 WizardDialog(Window).runEventLoop(Shell) line: 825 WizardDialog(Window).open() line: 801 WizardShortcutAction.run() line: 98 WizardShortcutAction(Action).runWithEvent(Event) line: 498 ActionContributionItem.handleWidgetSelection(Event, boolean) line: 584 ActionContributionItem.access$2(ActionContributionItem, Event, boolean) line: 501 ActionContributionItem$5.handleEvent(Event) line: 411 EventTable.sendEvent(Event) line: 84 Display.sendEvent(EventTable, Event) line: 3706 MenuItem(Widget).sendEvent(Event) line: 1314 MenuItem(Widget).sendEvent(int, Event, boolean) line: 1337 MenuItem(Widget).sendEvent(int, Event) line: 1322 MenuItem(Widget).notifyListeners(int, Event) line: 1136 Display.runDeferredEvents() line: 3566 Display.readAndDispatch() line: 3224 Workbench.runEventLoop(Window$IExceptionHandler, Display) line: 2407 Workbench.runUI() line: 2371 Workbench.access$4(Workbench) line: 2220 Workbench$5.run() line: 500 Realm.runWithDefault(Realm, Runnable) line: 332 Workbench.createAndRunWorkbench(Display, WorkbenchAdvisor) line: 493 PlatformUI.createAndRunWorkbench(Display, WorkbenchAdvisor) line: 149 IDEApplication.start(IApplicationContext) line: 115 EclipseAppHandle.run(Object) line: 194 EclipseAppLauncher.runApplication(Object) line: 110 EclipseAppLauncher.start(Object) line: 79 EclipseStarter.run(Object) line: 367 EclipseStarter.run(String[], Runnable) line: 179 NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method] NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39 DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25 Method.invoke(Object, Object...) line: 597 Main.invokeFramework(String[], URL[]) line: 611 Main.basicRun(String[]) line: 566 Main.run(String[]) line: 1363 Main.main(String[]) line: 1339
(In reply to comment #38) > Here's the stack: > It seams to deadlock in trying to release the sftp channel. This could only happen if an sftp channel is released twice thus overfilling the queue. I try to reproduce this later. If I can't I'll send you a patch with the counters for the queue commented in and we can verify that this is indeed the case.
Send patch if you like. I can test easily.
Created attachment 157978 [details] as last patch with more debugging This is the patch with more debugging. I tested several machines including: localhost in Germany in California (Franklin) in Illinois (Abe) since earlier test seamed to correlate with the Network latency (ping time). What machine do you use to get this error?
(In reply to comment #41) > Created an attachment (id=157978) [details] > as last patch with more debugging > > This is the patch with more debugging. > > I tested several machines including: > localhost > in Germany > in California (Franklin) > in Illinois (Abe) > > since earlier test seamed to correlate with the Network latency (ping time). > > What machine do you use to get this error? Same here. I tested on two additional machines to Roland's without running into the problem. I guess we shouldn't rule anything out at the moment, also that Greg is testing on OSX, as unlikely as it seems to be the cause.
(In reply to comment #41) > Created an attachment (id=157978) > as last patch with more debugging > > This is the patch with more debugging. > > I tested several machines including: > localhost > in Germany > in California (Franklin) > in Illinois (Abe) > > since earlier test seamed to correlate with the Network latency (ping time). > > What machine do you use to get this error? Do I apply this patch on top of the previous patch? I'm seeing the deadlock between my Mac and the NCSA machine Abe.
(In reply to comment #43) > (In reply to comment #41) > > Created an attachment (id=157978) [details] > > as last patch with more debugging > > > > This is the patch with more debugging. > > > > I tested several machines including: > > localhost > > in Germany > > in California (Franklin) > > in Illinois (Abe) > > > > since earlier test seamed to correlate with the Network latency (ping time). > > > > What machine do you use to get this error? > > Do I apply this patch on top of the previous patch? I'm seeing the deadlock > between my Mac and the NCSA machine Abe. It is against HEAD. Without assuming any previous patches. Is there a way to make a patch in Eclipse relative to an earlier patch? I meant the same "Abe". For me the latency is 29ms to it.
I backed out all the patches, then applied this one, but now I'm getting errors on CopyTools, FileTools, RemoteItem, etc. Unfortunately I think it's only possible to generate a patch relative to CVS, so the previous patch would need to be committed first. If you could just generate a patch containing the changes in your workspace, that would be appreciated.
Created attachment 158086 [details] as last patch with more debugging (now correct) Sorry. Must have made a mistake when I generated the last patch including debugging. It seemed to not include all changed files. Hope this one is OK.
Still seeing a deadlock. I've included the stackframes of all threads at the time, along with a trace. Looks like it happened in the close. GETCHILD: .bash_logout GETCHILD: .bash_profile GETCHILD: .bashrc GETCHILD: .emacs GETCHILD: .xemacs GETCHILD: .pbs_spool GETCHILD: scratch-global GETCHILD: .soft GETCHILD: .soft.cache.csh GETCHILD: .soft.cache.sh GETCHILD: .history GETCHILD: mpqc GETCHILD: .viminfo GETCHILD: ptp GETCHILD: openmpi-1.4a1r21889.tar.gz GETCHILD: openmpi-1.4a1r21889 GETCHILD: ompi GETCHILD: mpqc-2.3.1.tar.bz2 GETCHILD: mpqc-2.3.1 GETCHILD: cblas.tgz GETCHILD: CBLAS GETCHILD: blas_linux.tgz GETCHILD: blas_linux.a GETCHILD: LAPACK GETCHILD: lapack_linux.tgz GETCHILD: lapack_linux.a GETCHILD: make.inc.linux GETCHILD: .ssh GETCHILD: pbs GETCHILD: shallow GETCHILD: .bash_history GETCHILD: test.c GETCHILD: test GETCHILD: .cvspass GETCHILD: rdt-server-linux-3.0.0.tar GETCHILD: rdt-server GETCHILD: abe_test GETCHILD: .eclipse GETCHILD: sftp_test GETCHILD: .eclipsesettings FETCHINFO: /u/ac/grw/remote1 fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 fetchRemoteAttr: no such file FETCHINFO: /u/ac/grw/remote1 GETCHILD: .project FETCHINFO: /u/ac/grw/remote1/.project fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 fetchRemoteAttr: no such file FETCHINFO: /u/ac/grw/remote1 GETCHILD: .project FETCHINFO: /u/ac/grw/remote1/.project GETCHILD: .project GETPARENT: /u/ac/grw/remote1/.project MKDIR: /u/ac/grw/remote1 fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 drwxr-x--x 41404 202 4096 Wed Feb 03 14:26:02 EST 2010 channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 OPENOUTPUTSTREAM: /u/ac/grw/remote1/.project getOutputStream: append: 0 channelPool.size() -> 3 thread: Thread-0 MyPipedOutputStream.close MyPipedOutputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 FETCHINFO: /u/ac/grw/remote1/.project fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 -rw-r--r-- 41404 14696 200 Wed Feb 03 14:26:25 EST 2010 GETCHILD: .project GETCHILD: .project FETCHINFO: /u/ac/grw/remote1/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote1/.project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote1/.project channelPool.size() -> 3 thread: Thread-0 MyPipedInputStream.close MyPipedInputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 GETCHILD: .project FETCHINFO: /u/ac/grw/remote1/.project GETCHILD: .project OPENOUTPUTSTREAM: /u/ac/grw/remote1/.project getOutputStream: append: 0 channelPool.size() -> 3 thread: Thread-0 MyPipedOutputStream.close MyPipedOutputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 FETCHINFO: /u/ac/grw/remote1/.project fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 -rw-r--r-- 41404 14696 248 Wed Feb 03 14:26:26 EST 2010 GETCHILD: .project GETCHILD: .project FETCHINFO: /u/ac/grw/remote1/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote1/.project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote1/.project channelPool.size() -> 3 thread: Thread-0 MyPipedInputStream.close MyPipedInputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 GETCHILD: .project FETCHINFO: /u/ac/grw/remote1/.project GETCHILD: .project OPENOUTPUTSTREAM: /u/ac/grw/remote1/.project getOutputStream: append: 0 channelPool.size() -> 3 thread: Thread-0 MyPipedOutputStream.close MyPipedOutputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 FETCHINFO: /u/ac/grw/remote1/.project fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 -rw-r--r-- 41404 14696 297 Wed Feb 03 14:26:27 EST 2010 GETCHILD: .project GETCHILD: .project FETCHINFO: /u/ac/grw/remote1/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote1/.project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote1/.project channelPool.size() -> 3 thread: Thread-0 MyPipedInputStream.close MyPipedInputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 GETCHILD: .project FETCHINFO: /u/ac/grw/remote1/.project GETCHILD: .project OPENOUTPUTSTREAM: /u/ac/grw/remote1/.project getOutputStream: append: 0 channelPool.size() -> 3 thread: Thread-0 MyPipedOutputStream.close MyPipedOutputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 FETCHINFO: /u/ac/grw/remote1/.project fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 -rw-r--r-- 41404 14696 354 Wed Feb 03 14:26:27 EST 2010 GETCHILD: .project GETCHILD: .cproject FETCHINFO: /u/ac/grw/remote1/.cproject fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 fetchRemoteAttr: no such file GETCHILD: .cproject FETCHINFO: /u/ac/grw/remote1/.cproject GETCHILD: .cdtproject FETCHINFO: /u/ac/grw/remote1/.cdtproject GETCHILD: .project FETCHINFO: /u/ac/grw/remote1/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote1/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote1/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote1/.project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote1/.project channelPool.size() -> 3 thread: Thread-0 MyPipedInputStream.close MyPipedInputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 GETCHILD: .project FETCHINFO: /u/ac/grw/remote1/.project GETCHILD: .project OPENOUTPUTSTREAM: /u/ac/grw/remote1/.project getOutputStream: append: 0 channelPool.size() -> 3 thread: Thread-0 MyPipedOutputStream.close MyPipedOutputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 FETCHINFO: /u/ac/grw/remote1/.project fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 -rw-r--r-- 41404 14696 636 Wed Feb 03 14:26:28 EST 2010 GETCHILD: .project GETCHILD: .project FETCHINFO: /u/ac/grw/remote1/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote1/.project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote1/.project channelPool.size() -> 3 thread: Thread-0 MyPipedInputStream.close MyPipedInputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 GETCHILD: .project FETCHINFO: /u/ac/grw/remote1/.project GETCHILD: .project OPENOUTPUTSTREAM: /u/ac/grw/remote1/.project getOutputStream: append: 0 channelPool.size() -> 3 thread: Thread-0 MyPipedOutputStream.close MyPipedOutputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 FETCHINFO: /u/ac/grw/remote1/.project fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 -rw-r--r-- 41404 14696 775 Wed Feb 03 14:26:29 EST 2010 GETCHILD: .project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote1/.project channelPool.size() -> 3 thread: Thread-0 MyPipedInputStream.close MyPipedInputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 GETCHILD: .project FETCHINFO: /u/ac/grw/remote1/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote1/.project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote1/.project channelPool.size() -> 3 thread: Thread-0 MyPipedInputStream.close MyPipedInputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 GETCHILD: .project FETCHINFO: /u/ac/grw/remote1/.project GETCHILD: .project OPENOUTPUTSTREAM: /u/ac/grw/remote1/.project getOutputStream: append: 0 channelPool.size() -> 3 thread: Thread-0 MyPipedOutputStream.close MyPipedOutputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 FETCHINFO: /u/ac/grw/remote1/.project fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 -rw-r--r-- 41404 14696 2349 Wed Feb 03 14:26:29 EST 2010 GETCHILD: .project GETCHILD: .cproject GETCHILD: .cproject FETCHINFO: /u/ac/grw/remote1/.cproject FETCHINFO: /u/ac/grw/remote1 fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 drwxr-xr-x 41404 14696 4096 Wed Feb 03 14:26:25 EST 2010 GETCHILD: .cproject FETCHINFO: /u/ac/grw/remote1/.cproject GETCHILD: .cproject GETPARENT: /u/ac/grw/remote1/.cproject MKDIR: /u/ac/grw/remote1 OPENOUTPUTSTREAM: /u/ac/grw/remote1/.cproject getOutputStream: append: 0 channelPool.size() -> 3 thread: Thread-0 MyPipedOutputStream.close MyPipedOutputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 FETCHINFO: /u/ac/grw/remote1/.cproject fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 -rw-r--r-- 41404 14696 12168 Wed Feb 03 14:26:30 EST 2010 GETCHILD: .cproject GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote1/.project channelPool.size() -> 3 thread: Thread-0 MyPipedInputStream.close release, channelPool.size() -> 2 thread: Thread-0 GETCHILD: .project FETCHINFO: /u/ac/grw/remote1/.project GETCHILD: .project OPENOUTPUTSTREAM: /u/ac/grw/remote1/.project getOutputStream: append: 0 channelPool.size() -> 3 thread: Thread-0 MyPipedOutputStream.close MyPipedOutputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 FETCHINFO: /u/ac/grw/remote1/.project fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 -rw-r--r-- 41404 14696 503 Wed Feb 03 14:26:31 EST 2010 GETCHILD: .project GETCHILD: .project FETCHINFO: /u/ac/grw/remote1/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote1/.project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote1/.project channelPool.size() -> 3 thread: Thread-0 MyPipedInputStream.close MyPipedInputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 GETCHILD: .project FETCHINFO: /u/ac/grw/remote1/.project GETCHILD: .project OPENOUTPUTSTREAM: /u/ac/grw/remote1/.project getOutputStream: append: 0 channelPool.size() -> 3 thread: Thread-0 MyPipedOutputStream.close MyPipedOutputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 FETCHINFO: /u/ac/grw/remote1/.project fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 -rw-r--r-- 41404 14696 628 Wed Feb 03 14:26:32 EST 2010 GETCHILD: .project GETCHILD: .project FETCHINFO: /u/ac/grw/remote1/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote1/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote1/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote1/.project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote1/.project channelPool.size() -> 3 thread: Thread-0 MyPipedInputStream.close release, channelPool.size() -> 2 thread: Thread-0 GETCHILD: .project FETCHINFO: /u/ac/grw/remote1/.project GETCHILD: .project OPENOUTPUTSTREAM: /u/ac/grw/remote1/.project getOutputStream: append: 0 channelPool.size() -> 3 thread: Thread-0 MyPipedOutputStream.close MyPipedOutputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 FETCHINFO: /u/ac/grw/remote1/.project fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 -rw-r--r-- 41404 14696 828 Wed Feb 03 14:26:32 EST 2010 GETCHILD: .project GETCHILD: .project FETCHINFO: /u/ac/grw/remote1/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote1/.project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote1/.project channelPool.size() -> 3 thread: Thread-0 MyPipedInputStream.close MyPipedInputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 GETCHILD: .project FETCHINFO: /u/ac/grw/remote1/.project GETCHILD: .project OPENOUTPUTSTREAM: /u/ac/grw/remote1/.project getOutputStream: append: 0 channelPool.size() -> 3 thread: Thread-0 MyPipedOutputStream.close MyPipedOutputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 FETCHINFO: /u/ac/grw/remote1/.project fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 -rw-r--r-- 41404 14696 944 Wed Feb 03 14:26:33 EST 2010 GETCHILD: .project GETCHILD: .project FETCHINFO: /u/ac/grw/remote1/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote1/.project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote1/.project channelPool.size() -> 3 thread: Thread-0 MyPipedInputStream.close release, channelPool.size() -> 2 thread: Thread-0 GETCHILD: .project FETCHINFO: /u/ac/grw/remote1/.project GETCHILD: .project OPENOUTPUTSTREAM: /u/ac/grw/remote1/.project getOutputStream: append: 0 channelPool.size() -> 3 thread: Thread-0 MyPipedOutputStream.close MyPipedOutputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 FETCHINFO: /u/ac/grw/remote1/.project fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 -rw-r--r-- 41404 14696 1065 Wed Feb 03 14:26:33 EST 2010 GETCHILD: .project GETCHILD: .project FETCHINFO: /u/ac/grw/remote1/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote1/.project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote1/.project channelPool.size() -> 3 thread: Thread-0 MyPipedInputStream.close org.eclipse.equinox.launcher.Main at localhost:61770 (Suspended) Daemon System Thread [Signal Dispatcher] (Suspended) Daemon System Thread [Finalizer] (Suspended) Object.wait(long) line: not available [native method] ReferenceQueue<T>.remove(long) line: 118 ReferenceQueue<T>.remove() line: 134 Finalizer$FinalizerThread.run() line: 159 Daemon System Thread [Reference Handler] (Suspended) Object.wait(long) line: not available [native method] Reference$Lock(Object).wait() line: 485 Reference$ReferenceHandler.run() line: 116 Thread [main] (Suspended) Daemon Thread [Thread-0] (Suspended) Throwable.fillInStackTrace() line: not available [native method] InterruptedException(Throwable).<init>() line: 181 InterruptedException(Exception).<init>() line: 29 InterruptedException.<init>() line: 38 FutureTask$Sync(AbstractQueuedSynchronizer).tryAcquireSharedNanos(int, long) line: 1238 FutureTask$Sync.innerGet(long) line: 227 FutureTask<V>.get(long, TimeUnit) line: 91 FileTools$3(FileTools$SftpCallable<T>).waitCmdInThread(Future<T>, IProgressMonitor) line: 726 FileTools$SftpCallable<T>.access$1(FileTools$SftpCallable, Future, IProgressMonitor) line: 716 FileTools$MyPipedInputStream<T>.close() line: 441 BufferedInputStream.close() line: 451 FileUtil.safeClose(InputStream) line: 182 FileSystemResourceManager.descriptionChanged(IFile, byte[]) line: 303 FileSystemResourceManager.internalWrite(IProject, IProjectDescription, int, boolean, boolean) line: 535 Project.writeDescription(IProjectDescription, int, boolean, boolean) line: 1196 Project.setDescription(IProjectDescription, int, IProgressMonitor) line: 1085 Project.setDescription(IProjectDescription, IProgressMonitor) line: 1109 BuildInfoFactory$BuildInfoProject.putString(String, String) line: 490 BuildInfoFactory$BuildInfoProject(BuildInfoFactory$AbstractBuildInfo).setStopOnError(boolean) line: 201 RemoteMakeNature.configure() line: 186 NatureManager$1.run() line: 143 SafeRunner.run(ISafeRunnable) line: 42 NatureManager.configureNature(Project, String, MultiStatus) line: 158 NatureManager.configureNatures(Project, ProjectDescription, ProjectDescription, MultiStatus) line: 203 Project.basicSetDescription(ProjectDescription, int) line: 86 Project.setDescription(IProjectDescription, int, IProgressMonitor) line: 1081 Project.setDescription(IProjectDescription, IProgressMonitor) line: 1109 RemoteMakeNature.addNature(IProject, IProgressMonitor) line: 59 RemoteMakefileWizardHandler.createProject(IProject, boolean, boolean, IProgressMonitor) line: 108 CDTCommonProjectWizard$1$1$1.run(IProgressMonitor) line: 257 WorkspaceModifyDelegatingOperation.execute(IProgressMonitor) line: 69 WorkspaceModifyOperation$1.run(IProgressMonitor) line: 106 Workspace.run(IWorkspaceRunnable, ISchedulingRule, int, IProgressMonitor) line: 1982 WorkspaceModifyDelegatingOperation(WorkspaceModifyOperation).run(IProgressMonitor) line: 118 ModalContext.runInCurrentThread(IRunnableWithProgress, IProgressMonitor) line: 464 ModalContext.run(IRunnableWithProgress, boolean, IProgressMonitor, Display) line: 372 WizardDialog.run(boolean, boolean, IRunnableWithProgress) line: 944 CDTCommonProjectWizard$1$1.run() line: 266 UILockListener.doPendingWork() line: 155 UISynchronizer$3.run() line: 158 RunnableLock.run() line: 35 UISynchronizer(Synchronizer).runAsyncMessages(boolean) line: 134 Display.runAsyncMessages(boolean) line: 3530 Display.readAndDispatch() line: 3226 ModalContext$ModalContextThread.block() line: 173 ModalContext.run(IRunnableWithProgress, boolean, IProgressMonitor, Display) line: 388 WizardDialog.run(boolean, boolean, IRunnableWithProgress) line: 944 NewRemoteCppProjectWizard(CDTCommonProjectWizard).invokeRunnable(IRunnableWithProgress) line: 179 NewRemoteCppProjectWizard(CDTCommonProjectWizard).getProject(boolean, boolean) line: 157 NewRemoteCppProjectWizard(CDTCommonProjectWizard).performFinish() line: 195 WizardDialog.finishPressed() line: 752 WizardDialog.buttonPressed(int) line: 373 Dialog$2.widgetSelected(SelectionEvent) line: 624 TypedListener.handleEvent(Event) line: 228 EventTable.sendEvent(Event) line: 84 Display.sendEvent(EventTable, Event) line: 3706 Button(Widget).sendEvent(Event) line: 1314 Button(Widget).sendEvent(int, Event, boolean) line: 1337 Button(Widget).sendEvent(int, Event) line: 1322 Button(Widget).notifyListeners(int, Event) line: 1136 Display.runDeferredEvents() line: 3566 Display.readAndDispatch() line: 3224 WizardDialog(Window).runEventLoop(Shell) line: 825 WizardDialog(Window).open() line: 801 WizardShortcutAction.run() line: 98 WizardShortcutAction(Action).runWithEvent(Event) line: 498 ActionContributionItem.handleWidgetSelection(Event, boolean) line: 584 ActionContributionItem.access$2(ActionContributionItem, Event, boolean) line: 501 ActionContributionItem$5.handleEvent(Event) line: 411 EventTable.sendEvent(Event) line: 84 Display.sendEvent(EventTable, Event) line: 3706 MenuItem(Widget).sendEvent(Event) line: 1314 MenuItem(Widget).sendEvent(int, Event, boolean) line: 1337 MenuItem(Widget).sendEvent(int, Event) line: 1322 MenuItem(Widget).notifyListeners(int, Event) line: 1136 Display.runDeferredEvents() line: 3566 Display.readAndDispatch() line: 3224 Workbench.runEventLoop(Window$IExceptionHandler, Display) line: 2407 Workbench.runUI() line: 2371 Workbench.access$4(Workbench) line: 2220 Workbench$5.run() line: 500 Realm.runWithDefault(Realm, Runnable) line: 332 Workbench.createAndRunWorkbench(Display, WorkbenchAdvisor) line: 493 PlatformUI.createAndRunWorkbench(Display, WorkbenchAdvisor) line: 149 IDEApplication.start(IApplicationContext) line: 115 EclipseAppHandle.run(Object) line: 194 EclipseAppLauncher.runApplication(Object) line: 110 EclipseAppLauncher.start(Object) line: 79 EclipseStarter.run(Object) line: 367 EclipseStarter.run(String[], Runnable) line: 179 NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method] NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39 DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25 Method.invoke(Object, Object...) line: 597 Main.invokeFramework(String[], URL[]) line: 611 Main.basicRun(String[]) line: 566 Main.run(String[]) line: 1363 Main.main(String[]) line: 1339 Daemon Thread [State Data Manager] (Suspended) Thread.sleep(long) line: not available [native method] StateManager.run() line: 318 Thread.run() line: 637 Daemon Thread [Start Level Event Dispatcher] (Suspended) Object.wait(long) line: not available [native method] EventManager$EventThread(Object).wait() line: 485 EventManager$EventThread.getNextEvent() line: 397 EventManager$EventThread.run() line: 333 Daemon Thread [Framework Event Dispatcher] (Suspended) Object.wait(long) line: not available [native method] EventManager$EventThread(Object).wait() line: 485 EventManager$EventThread.getNextEvent() line: 397 EventManager$EventThread.run() line: 333 Daemon Thread [Bundle File Closer] (Suspended) Object.wait(long) line: not available [native method] EventManager$EventThread(Object).wait() line: 485 EventManager$EventThread.getNextEvent() line: 397 EventManager$EventThread.run() line: 333 Daemon Thread [[Timer] - Main Queue Handler] (Suspended) Object.wait(long) line: not available [native method] TimerImpl.run() line: 141 Thread.run() line: 637 Thread [Worker-0] (Suspended) Object.wait(long) line: not available [native method] Semaphore.acquire(long) line: 38 OrderedLock.doAcquire(Semaphore, long) line: 168 OrderedLock.acquire(long) line: 105 OrderedLock.acquire() line: 82 WorkManager.checkIn(ISchedulingRule, IProgressMonitor) line: 118 Workspace.prepareOperation(ISchedulingRule, IProgressMonitor) line: 1921 Workspace.run(IWorkspaceRunnable, ISchedulingRule, int, IProgressMonitor) line: 1977 NotificationManager$NotifyJob.run(IProgressMonitor) line: 40 Worker.run() line: 55 Daemon Thread [org.eclipse.cdt.internal.ui.text.CReconciler] (Suspended) Object.wait(long) line: not available [native method] AbstractReconciler$BackgroundThread.run() line: 179 Daemon Thread [Java indexing] (Suspended) Object.wait(long) line: not available [native method] IndexManager(Object).wait() line: 485 IndexManager(JobManager).run() line: 381 Thread.run() line: 637 Thread [Worker-2] (Suspended) Object.wait(long) line: not available [native method] WorkerPool.sleep(long) line: 185 WorkerPool.startJob(Worker) line: 217 Worker.run() line: 51 Thread [Worker-3] (Suspended) Object.wait(long) line: not available [native method] ThreadJob.joinRun(IProgressMonitor) line: 187 ImplicitJobs.begin(ISchedulingRule, IProgressMonitor, boolean) line: 87 JobManager.beginRule(ISchedulingRule, IProgressMonitor) line: 232 WorkManager.checkIn(ISchedulingRule, IProgressMonitor) line: 117 Workspace.prepareOperation(ISchedulingRule, IProgressMonitor) line: 1921 Project(Resource).refreshLocal(int, IProgressMonitor) line: 1786 RefreshJob.runInWorkspace(IProgressMonitor) line: 166 RefreshJob(InternalWorkspaceJob).run(IProgressMonitor) line: 38 Worker.run() line: 55 Thread [Worker-4] (Suspended) Object.wait(long) line: not available [native method] Semaphore.acquire(long) line: 38 OrderedLock.doAcquire(Semaphore, long) line: 168 OrderedLock.acquire(long) line: 105 OrderedLock.acquire() line: 82 WorkManager.endUnprotected(int) line: 181 Workspace.run(IWorkspaceRunnable, ISchedulingRule, int, IProgressMonitor) line: 1990 ProgressMonitorUtility$1.run(IProgressMonitor) line: 58 Worker.run() line: 55 Thread [Worker-5] (Suspended) Object.wait(long) line: not available [native method] ExecutionObserver.run(IProgressMonitor) line: 71 Worker.run() line: 55 Thread [Worker-6] (Suspended) Object.wait(long) line: not available [native method] WorkerPool.sleep(long) line: 185 WorkerPool.startJob(Worker) line: 217 Worker.run() line: 51 Thread [Worker-7] (Suspended) Thread.sleep(long) line: not available [native method] DecorationScheduler$1.run(IProgressMonitor) line: 302 Worker.run() line: 55 Thread [Worker-8] (Suspended) Object.wait(long) line: not available [native method] WorkerPool.sleep(long) line: 185 WorkerPool.startJob(Worker) line: 217 Worker.run() line: 51 Daemon Thread [[ThreadPool Manager] - Idle Thread] (Suspended) Object.wait(long) line: not available [native method] Executor(Object).wait() line: 485 Executor.run() line: 106 Daemon Thread [Target Control polling] (Suspended) Thread.sleep(long) line: not available [native method] PoolingTargetControlEventProvider$MonitorThread.run() line: 64 Daemon Thread [Connect thread abe.ncsa.uiuc.edu session] (Suspended) SocketInputStream.socketRead0(FileDescriptor, byte[], int, int, int) line: not available [native method] SocketInputStream.read(byte[], int, int) line: 129 IO.getByte(byte[], int, int) line: 82 Session.read(Buffer) line: 809 Session.run() line: 1193 Thread.run() line: 637 Daemon Thread [org.eclipse.ptp.remotetools.utils.stream.TextStreamObserver] (Suspended) Object.wait(long) line: not available [native method] Channel$MyPipedInputStream(PipedInputStream).read() line: 310 Channel$MyPipedInputStream(PipedInputStream).read(byte[], int, int) line: 361 StreamDecoder.readBytes() line: 264 StreamDecoder.implRead(char[], int, int) line: 306 StreamDecoder.read(char[], int, int) line: 158 InputStreamReader.read(char[], int, int) line: 167 BufferedReader.fill() line: 136 BufferedReader.readLine(boolean) line: 299 BufferedReader.readLine() line: 362 TextStreamObserver.run() line: 79 Daemon Thread [ModalContext] (Suspended) Object.wait(long) line: not available [native method] Semaphore.acquire(long) line: 43 UISynchronizer.syncExec(Runnable) line: 168 Display.syncExec(Runnable) line: 4120 CDTCommonProjectWizard$1.run(IProgressMonitor) line: 242 WorkspaceModifyDelegatingOperation.execute(IProgressMonitor) line: 69 WorkspaceModifyOperation$1.run(IProgressMonitor) line: 106 Workspace.run(IWorkspaceRunnable, ISchedulingRule, int, IProgressMonitor) line: 1982 WorkspaceModifyDelegatingOperation(WorkspaceModifyOperation).run(IProgressMonitor) line: 118 ModalContext$ModalContextThread.run() line: 121 Thread [pool-136-thread-1] (Suspended) Unsafe.park(boolean, long) line: not available [native method] LockSupport.park(Object) line: 158 AbstractQueuedSynchronizer$ConditionObject.await() line: 1925 LinkedBlockingQueue<E>.take() line: 358 ThreadPoolExecutor.getTask() line: 947 ThreadPoolExecutor$Worker.run() line: 907 Thread.run() line: 637
Created attachment 158099 [details] as last patch - hopefully bug fixed As far as I can see it was not a dead-lock but a endless loop in waitCmdInThread. Future.get throws a InterruptedException if Thread.interrupted() is true. Since I catched this exception in this loop and called Thread.currentThread().interrupt(), this looped forever. Please try again. While I searched for this bug I found there is a potential of a SftpExecption caused by a IOExecption "Pipe not connected". But this shouldn't happen with the project wizard but only with large files on the main thread. I'll send a patch for that later.
Created attachment 158111 [details] as last patch - including Pipe closed exception fix fixed the pide closed exception. otherwise the same. Hopefully now everything is ok.
This time I got a bunch of InterruptedExceptions and a NullPointerException: channelPool.size() -> 3 thread: Worker-8 release, channelPool.size() -> 2 thread: Worker-8 GETCHILD: .bash_logout GETCHILD: .bash_profile GETCHILD: .bashrc GETCHILD: .emacs GETCHILD: .xemacs GETCHILD: .pbs_spool GETCHILD: scratch-global GETCHILD: .soft GETCHILD: .soft.cache.csh GETCHILD: .soft.cache.sh GETCHILD: .history GETCHILD: mpqc GETCHILD: .viminfo GETCHILD: ptp GETCHILD: openmpi-1.4a1r21889.tar.gz GETCHILD: openmpi-1.4a1r21889 GETCHILD: ompi GETCHILD: mpqc-2.3.1.tar.bz2 GETCHILD: mpqc-2.3.1 GETCHILD: cblas.tgz GETCHILD: CBLAS GETCHILD: blas_linux.tgz GETCHILD: blas_linux.a GETCHILD: LAPACK GETCHILD: lapack_linux.tgz GETCHILD: lapack_linux.a GETCHILD: make.inc.linux GETCHILD: .ssh GETCHILD: remote1 GETCHILD: pbs GETCHILD: shallow GETCHILD: .bash_history GETCHILD: test.c GETCHILD: test GETCHILD: .cvspass GETCHILD: rdt-server-linux-3.0.0.tar GETCHILD: rdt-server GETCHILD: abe_test GETCHILD: .eclipse GETCHILD: sftp_test GETCHILD: .eclipsesettings FETCHINFO: /u/ac/grw/remote2 fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 fetchRemoteAttr: no such file FETCHINFO: /u/ac/grw/remote2 GETCHILD: .project FETCHINFO: /u/ac/grw/remote2/.project fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 fetchRemoteAttr: no such file FETCHINFO: /u/ac/grw/remote2 GETCHILD: .project FETCHINFO: /u/ac/grw/remote2/.project GETCHILD: .project GETPARENT: /u/ac/grw/remote2/.project MKDIR: /u/ac/grw/remote2 fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 drwxr-x--x 41404 202 4096 Wed Feb 03 14:26:25 EST 2010 channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 OPENOUTPUTSTREAM: /u/ac/grw/remote2/.project getOutputStream: append: 0 channelPool.size() -> 3 thread: Thread-0 MyPipedOutputStream.close MyPipedOutputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 FETCHINFO: /u/ac/grw/remote2/.project fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 -rw-r--r-- 41404 14696 200 Wed Feb 03 18:32:43 EST 2010 GETCHILD: .project GETCHILD: .project FETCHINFO: /u/ac/grw/remote2/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote2/.project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote2/.project channelPool.size() -> 3 thread: Thread-0 MyPipedInputStream.close MyPipedInputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 GETCHILD: .project FETCHINFO: /u/ac/grw/remote2/.project GETCHILD: .project OPENOUTPUTSTREAM: /u/ac/grw/remote2/.project getOutputStream: append: 0 channelPool.size() -> 3 thread: Thread-0 MyPipedOutputStream.close MyPipedOutputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 FETCHINFO: /u/ac/grw/remote2/.project fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 -rw-r--r-- 41404 14696 248 Wed Feb 03 18:32:44 EST 2010 GETCHILD: .project GETCHILD: .project FETCHINFO: /u/ac/grw/remote2/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote2/.project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote2/.project channelPool.size() -> 3 thread: Thread-0 MyPipedInputStream.close MyPipedInputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 GETCHILD: .project FETCHINFO: /u/ac/grw/remote2/.project GETCHILD: .project OPENOUTPUTSTREAM: /u/ac/grw/remote2/.project getOutputStream: append: 0 channelPool.size() -> 3 thread: Thread-0 MyPipedOutputStream.close MyPipedOutputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 FETCHINFO: /u/ac/grw/remote2/.project fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 -rw-r--r-- 41404 14696 297 Wed Feb 03 18:32:45 EST 2010 GETCHILD: .project GETCHILD: .project FETCHINFO: /u/ac/grw/remote2/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote2/.project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote2/.project channelPool.size() -> 3 thread: Thread-0 MyPipedInputStream.close MyPipedInputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 GETCHILD: .project FETCHINFO: /u/ac/grw/remote2/.project GETCHILD: .project OPENOUTPUTSTREAM: /u/ac/grw/remote2/.project getOutputStream: append: 0 channelPool.size() -> 3 thread: Thread-0 MyPipedOutputStream.close MyPipedOutputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 FETCHINFO: /u/ac/grw/remote2/.project fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 -rw-r--r-- 41404 14696 354 Wed Feb 03 18:32:46 EST 2010 GETCHILD: .project GETCHILD: .cproject FETCHINFO: /u/ac/grw/remote2/.cproject fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 fetchRemoteAttr: no such file GETCHILD: .cproject FETCHINFO: /u/ac/grw/remote2/.cproject GETCHILD: .cdtproject FETCHINFO: /u/ac/grw/remote2/.cdtproject fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 fetchRemoteAttr: no such file GETCHILD: .project FETCHINFO: /u/ac/grw/remote2/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote2/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote2/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote2/.project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote2/.project channelPool.size() -> 3 thread: Thread-0 MyPipedInputStream.close MyPipedInputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 GETCHILD: .project FETCHINFO: /u/ac/grw/remote2/.project GETCHILD: .project OPENOUTPUTSTREAM: /u/ac/grw/remote2/.project getOutputStream: append: 0 channelPool.size() -> 3 thread: Thread-0 MyPipedOutputStream.close MyPipedOutputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 FETCHINFO: /u/ac/grw/remote2/.project fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 -rw-r--r-- 41404 14696 636 Wed Feb 03 18:32:48 EST 2010 GETCHILD: .project GETCHILD: .project FETCHINFO: /u/ac/grw/remote2/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote2/.project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote2/.project channelPool.size() -> 3 thread: Thread-0 MyPipedInputStream.close MyPipedInputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 GETCHILD: .project FETCHINFO: /u/ac/grw/remote2/.project GETCHILD: .project OPENOUTPUTSTREAM: /u/ac/grw/remote2/.project getOutputStream: append: 0 channelPool.size() -> 3 thread: Thread-0 MyPipedOutputStream.close MyPipedOutputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 FETCHINFO: /u/ac/grw/remote2/.project fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 -rw-r--r-- 41404 14696 775 Wed Feb 03 18:32:48 EST 2010 GETCHILD: .project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote2/.project channelPool.size() -> 3 thread: Thread-0 MyPipedInputStream.close MyPipedInputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 GETCHILD: .project FETCHINFO: /u/ac/grw/remote2/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote2/.project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote2/.project channelPool.size() -> 3 thread: Thread-0 MyPipedInputStream.close MyPipedInputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 GETCHILD: .project FETCHINFO: /u/ac/grw/remote2/.project GETCHILD: .project OPENOUTPUTSTREAM: /u/ac/grw/remote2/.project getOutputStream: append: 0 channelPool.size() -> 3 thread: Thread-0 MyPipedOutputStream.close MyPipedOutputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 FETCHINFO: /u/ac/grw/remote2/.project fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 -rw-r--r-- 41404 14696 2349 Wed Feb 03 18:32:50 EST 2010 GETCHILD: .project GETCHILD: .cproject GETCHILD: .cproject FETCHINFO: /u/ac/grw/remote2/.cproject FETCHINFO: /u/ac/grw/remote2 fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 drwxr-xr-x 41404 14696 4096 Wed Feb 03 18:32:43 EST 2010 GETCHILD: .cproject FETCHINFO: /u/ac/grw/remote2/.cproject GETCHILD: .cproject GETPARENT: /u/ac/grw/remote2/.cproject MKDIR: /u/ac/grw/remote2 OPENOUTPUTSTREAM: /u/ac/grw/remote2/.cproject getOutputStream: append: 0 channelPool.size() -> 3 thread: Thread-0 MyPipedOutputStream.close MyPipedOutputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 FETCHINFO: /u/ac/grw/remote2/.cproject fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 -rw-r--r-- 41404 14696 12166 Wed Feb 03 18:32:53 EST 2010 GETCHILD: .cproject GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote2/.project channelPool.size() -> 3 thread: Thread-0 MyPipedInputStream.close MyPipedInputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 GETCHILD: .project FETCHINFO: /u/ac/grw/remote2/.project GETCHILD: .project OPENOUTPUTSTREAM: /u/ac/grw/remote2/.project getOutputStream: append: 0 channelPool.size() -> 3 thread: Thread-0 MyPipedOutputStream.close MyPipedOutputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 FETCHINFO: /u/ac/grw/remote2/.project fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 -rw-r--r-- 41404 14696 503 Wed Feb 03 18:32:54 EST 2010 GETCHILD: .project GETCHILD: .project FETCHINFO: /u/ac/grw/remote2/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote2/.project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote2/.project channelPool.size() -> 3 thread: Thread-0 MyPipedInputStream.close MyPipedInputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 GETCHILD: .project FETCHINFO: /u/ac/grw/remote2/.project GETCHILD: .project OPENOUTPUTSTREAM: /u/ac/grw/remote2/.project getOutputStream: append: 0 channelPool.size() -> 3 thread: Thread-0 MyPipedOutputStream.close MyPipedOutputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 FETCHINFO: /u/ac/grw/remote2/.project fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 -rw-r--r-- 41404 14696 628 Wed Feb 03 18:32:55 EST 2010 GETCHILD: .project GETCHILD: .project FETCHINFO: /u/ac/grw/remote2/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote2/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote2/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote2/.project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote2/.project channelPool.size() -> 3 thread: Thread-0 MyPipedInputStream.close MyPipedInputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 java.lang.InterruptedException GETCHILD: .project FETCHINFO: /u/ac/grw/remote2/.project GETCHILD: .project OPENOUTPUTSTREAM: /u/ac/grw/remote2/.project getOutputStream: append: 0 channelPool.size() -> 2 thread: Thread-0 MyPipedOutputStream.close at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireInterruptibly(AbstractQueuedSynchronizer.java:1135) at java.util.concurrent.locks.ReentrantLock.lockInterruptibly(ReentrantLock.java:312) at java.util.concurrent.ArrayBlockingQueue.put(ArrayBlockingQueue.java:248) at org.eclipse.ptp.remotetools.internal.ssh.Connection.releaseSFTPChannel(Connection.java:661) at org.eclipse.ptp.remotetools.internal.ssh.FileTools.releaseSFTPChannel(FileTools.java:67) at org.eclipse.ptp.remotetools.internal.ssh.FileTools.access$0(FileTools.java:66) at org.eclipse.ptp.remotetools.internal.ssh.FileTools$SftpCallable.finalizeCmdInThread(FileTools.java:744) at org.eclipse.ptp.remotetools.internal.ssh.FileTools$SftpCallable.access$0(FileTools.java:743) at org.eclipse.ptp.remotetools.internal.ssh.FileTools$MyPipedInputStream.close(FileTools.java:448) at java.io.BufferedInputStream.close(BufferedInputStream.java:451) at org.eclipse.core.internal.utils.FileUtil.safeClose(FileUtil.java:182) at org.eclipse.core.internal.localstore.FileSystemResourceManager.descriptionChanged(FileSystemResourceManager.java:303) at org.eclipse.core.internal.localstore.FileSystemResourceManager.internalWrite(FileSystemResourceManager.java:535) at org.eclipse.core.internal.resources.Project.writeDescription(Project.java:1196) at org.eclipse.core.internal.resources.Project.setDescription(Project.java:1085) at org.eclipse.core.internal.resources.Project.setDescription(Project.java:1109) at org.eclipse.cdt.make.internal.core.BuildInfoFactory$BuildInfoProject.putString(BuildInfoFactory.java:490) at org.eclipse.cdt.make.internal.core.BuildInfoFactory$AbstractBuildInfo.setBuildAttribute(BuildInfoFactory.java:99) at org.eclipse.ptp.rdt.core.resources.RemoteMakeNature.configure(RemoteMakeNature.java:182) at org.eclipse.core.internal.resources.NatureManager$1.run(NatureManager.java:143) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) at org.eclipse.core.internal.resources.NatureManager.configureNature(NatureManager.java:158) at org.eclipse.core.internal.resources.NatureManager.configureNatures(NatureManager.java:203) at org.eclipse.core.internal.resources.Project.basicSetDescription(Project.java:86) at org.eclipse.core.internal.resources.Project.setDescription(Project.java:1081) at org.eclipse.core.internal.resources.Project.setDescription(Project.java:1109) at org.eclipse.ptp.rdt.core.resources.RemoteMakeNature.addNature(RemoteMakeNature.java:59) at org.eclipse.ptp.rdt.ui.wizards.RemoteMakefileWizardHandler.createProject(RemoteMakefileWizardHandler.java:108) at org.eclipse.cdt.ui.wizards.CDTCommonProjectWizard$1$1$1.run(CDTCommonProjectWizard.java:257) at org.eclipse.ui.actions.WorkspaceModifyDelegatingOperation.execute(WorkspaceModifyDelegatingOperation.java:69) at org.eclipse.ui.actions.WorkspaceModifyOperation$1.run(WorkspaceModifyOperation.java:106) at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1982) at org.eclipse.ui.actions.WorkspaceModifyOperation.run(WorkspaceModifyOperation.java:118) at org.eclipse.jface.operation.ModalContext.runInCurrentThread(ModalContext.java:464) at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:372) at org.eclipse.jface.wizard.WizardDialog.run(WizardDialog.java:944) at org.eclipse.cdt.ui.wizards.CDTCommonProjectWizard$1$1.run(CDTCommonProjectWizard.java:266) at org.eclipse.ui.internal.UILockListener.doPendingWork(UILockListener.java:155) at org.eclipse.ui.internal.UISynchronizer$3.run(UISynchronizer.java:158) at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134) at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3530) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3226) at org.eclipse.jface.operation.ModalContext$ModalContextThread.block(ModalContext.java:173) at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:388) at org.eclipse.jface.wizard.WizardDialog.run(WizardDialog.java:944) at org.eclipse.cdt.ui.wizards.CDTCommonProjectWizard.invokeRunnable(CDTCommonProjectWizard.java:179) at org.eclipse.cdt.ui.wizards.CDTCommonProjectWizard.getProject(CDTCommonProjectWizard.java:157) at org.eclipse.cdt.ui.wizards.CDTCommonProjectWizard.performFinish(CDTCommonProjectWizard.java:195) at org.eclipse.jface.wizard.WizardDialog.finishPressed(WizardDialog.java:752) at org.eclipse.jface.wizard.WizardDialog.buttonPressed(WizardDialog.java:373) at org.eclipse.jface.dialogs.Dialog$2.widgetSelected(Dialog.java:624) at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:228) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) at org.eclipse.swt.widgets.Display.sendEvent(Display.java:3706) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1314) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1337) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1322) at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1136) at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3566) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3224) at org.eclipse.jface.window.Window.runEventLoop(Window.java:825) at org.eclipse.jface.window.Window.open(Window.java:801) at org.eclipse.ui.internal.navigator.wizards.WizardShortcutAction.run(WizardShortcutAction.java:98) at org.eclipse.jface.action.Action.runWithEvent(Action.java:498) at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:584) at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:501) at org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:411) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) at org.eclipse.swt.widgets.Display.sendEvent(Display.java:3706) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1314) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1337) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1322) at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1136) at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3566) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3224) at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2407) at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2371) at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2220) at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:493) at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:115) at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:367) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) 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.eclipse.equinox.launcher.Main.invokeFramework(Main.java:611) at org.eclipse.equinox.launcher.Main.basicRun(Main.java:566) at org.eclipse.equinox.launcher.Main.run(Main.java:1363) at org.eclipse.equinox.launcher.Main.main(Main.java:1339) MyPipedOutputStream.close wait done release, channelPool.size() -> 1 thread: Thread-0 FETCHINFO: /u/ac/grw/remote2/.project fetchRemoteAttr channelPool.size() -> 2 thread: Thread-0 release, channelPool.size() -> 1 thread: Thread-0 -rw-r--r-- 41404 14696 828 Wed Feb 03 18:32:58 EST 2010 GETCHILD: .project GETCHILD: .project FETCHINFO: /u/ac/grw/remote2/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote2/.project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote2/.project channelPool.size() -> 2 thread: Thread-0 MyPipedInputStream.close MyPipedInputStream.close wait done release, channelPool.size() -> 1 thread: Thread-0 java.lang.InterruptedException GETCHILD: .project FETCHINFO: /u/ac/grw/remote2/.project GETCHILD: .project OPENOUTPUTSTREAM: /u/ac/grw/remote2/.project getOutputStream: append: 0 channelPool.size() -> 1 thread: Thread-0 MyPipedOutputStream.close at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireInterruptibly(AbstractQueuedSynchronizer.java:1135) at java.util.concurrent.locks.ReentrantLock.lockInterruptibly(ReentrantLock.java:312) at java.util.concurrent.ArrayBlockingQueue.put(ArrayBlockingQueue.java:248) at org.eclipse.ptp.remotetools.internal.ssh.Connection.releaseSFTPChannel(Connection.java:661) at org.eclipse.ptp.remotetools.internal.ssh.FileTools.releaseSFTPChannel(FileTools.java:67) at org.eclipse.ptp.remotetools.internal.ssh.FileTools.access$0(FileTools.java:66) at org.eclipse.ptp.remotetools.internal.ssh.FileTools$SftpCallable.finalizeCmdInThread(FileTools.java:744) at org.eclipse.ptp.remotetools.internal.ssh.FileTools$SftpCallable.access$0(FileTools.java:743) at org.eclipse.ptp.remotetools.internal.ssh.FileTools$MyPipedInputStream.close(FileTools.java:448) at java.io.BufferedInputStream.close(BufferedInputStream.java:451) at org.eclipse.core.internal.utils.FileUtil.safeClose(FileUtil.java:182) at org.eclipse.core.internal.localstore.FileSystemResourceManager.descriptionChanged(FileSystemResourceManager.java:303) at org.eclipse.core.internal.localstore.FileSystemResourceManager.internalWrite(FileSystemResourceManager.java:535) at org.eclipse.core.internal.resources.Project.writeDescription(Project.java:1196) at org.eclipse.core.internal.resources.Project.setDescription(Project.java:1085) at org.eclipse.core.internal.resources.Project.setDescription(Project.java:1109) at org.eclipse.cdt.make.internal.core.BuildInfoFactory$BuildInfoProject.putString(BuildInfoFactory.java:490) at org.eclipse.cdt.make.internal.core.BuildInfoFactory$AbstractBuildInfo.setBuildAttribute(BuildInfoFactory.java:99) at org.eclipse.ptp.rdt.core.resources.RemoteMakeNature.configure(RemoteMakeNature.java:183) at org.eclipse.core.internal.resources.NatureManager$1.run(NatureManager.java:143) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) at org.eclipse.core.internal.resources.NatureManager.configureNature(NatureManager.java:158) at org.eclipse.core.internal.resources.NatureManager.configureNatures(NatureManager.java:203) at org.eclipse.core.internal.resources.Project.basicSetDescription(Project.java:86) at org.eclipse.core.internal.resources.Project.setDescription(Project.java:1081) at org.eclipse.core.internal.resources.Project.setDescription(Project.java:1109) at org.eclipse.ptp.rdt.core.resources.RemoteMakeNature.addNature(RemoteMakeNature.java:59) at org.eclipse.ptp.rdt.ui.wizards.RemoteMakefileWizardHandler.createProject(RemoteMakefileWizardHandler.java:108) at org.eclipse.cdt.ui.wizards.CDTCommonProjectWizard$1$1$1.run(CDTCommonProjectWizard.java:257) at org.eclipse.ui.actions.WorkspaceModifyDelegatingOperation.execute(WorkspaceModifyDelegatingOperation.java:69) at org.eclipse.ui.actions.WorkspaceModifyOperation$1.run(WorkspaceModifyOperation.java:106) at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1982) at org.eclipse.ui.actions.WorkspaceModifyOperation.run(WorkspaceModifyOperation.java:118) at org.eclipse.jface.operation.ModalContext.runInCurrentThread(ModalContext.java:464) at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:372) at org.eclipse.jface.wizard.WizardDialog.run(WizardDialog.java:944) at org.eclipse.cdt.ui.wizards.CDTCommonProjectWizard$1$1.run(CDTCommonProjectWizard.java:266) at org.eclipse.ui.internal.UILockListener.doPendingWork(UILockListener.java:155) at org.eclipse.ui.internal.UISynchronizer$3.run(UISynchronizer.java:158) at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134) at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3530) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3226) at org.eclipse.jface.operation.ModalContext$ModalContextThread.block(ModalContext.java:173) at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:388) at org.eclipse.jface.wizard.WizardDialog.run(WizardDialog.java:944) at org.eclipse.cdt.ui.wizards.CDTCommonProjectWizard.invokeRunnable(CDTCommonProjectWizard.java:179) at org.eclipse.cdt.ui.wizards.CDTCommonProjectWizard.getProject(CDTCommonProjectWizard.java:157) at org.eclipse.cdt.ui.wizards.CDTCommonProjectWizard.performFinish(CDTCommonProjectWizard.java:195) at org.eclipse.jface.wizard.WizardDialog.finishPressed(WizardDialog.java:752) at org.eclipse.jface.wizard.WizardDialog.buttonPressed(WizardDialog.java:373) at org.eclipse.jface.dialogs.Dialog$2.widgetSelected(Dialog.java:624) at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:228) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) at org.eclipse.swt.widgets.Display.sendEvent(Display.java:3706) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1314) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1337) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1322) at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1136) at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3566) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3224) at org.eclipse.jface.window.Window.runEventLoop(Window.java:825) at org.eclipse.jface.window.Window.open(Window.java:801) at org.eclipse.ui.internal.navigator.wizards.WizardShortcutAction.run(WizardShortcutAction.java:98) at org.eclipse.jface.action.Action.runWithEvent(Action.java:498) at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:584) at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:501) at org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:411) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) at org.eclipse.swt.widgets.Display.sendEvent(Display.java:3706) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1314) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1337) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1322) at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1136) at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3566) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3224) at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2407) at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2371) at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2220) at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:493) at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:115) at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:367) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) 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.eclipse.equinox.launcher.Main.invokeFramework(Main.java:611) at org.eclipse.equinox.launcher.Main.basicRun(Main.java:566) at org.eclipse.equinox.launcher.Main.run(Main.java:1363) at org.eclipse.equinox.launcher.Main.main(Main.java:1339) MyPipedOutputStream.close wait done release, channelPool.size() -> 0 thread: Thread-0 FETCHINFO: /u/ac/grw/remote2/.project fetchRemoteAttr channelPool.size() -> 1 thread: Thread-0 release, channelPool.size() -> 0 thread: Thread-0 -rw-r--r-- 41404 14696 944 Wed Feb 03 18:32:59 EST 2010 GETCHILD: .project GETCHILD: .project FETCHINFO: /u/ac/grw/remote2/.project GETCHILD: .project FETCHINFO: /u/ac/grw/remote2/.project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote2/.project channelPool.size() -> 1 thread: Thread-0 MyPipedInputStream.close MyPipedInputStream.close wait done release, channelPool.size() -> 0 thread: Thread-0 GETCHILD: .project FETCHINFO: /u/ac/grw/remote2/.project GETCHILD: .project OPENOUTPUTSTREAM: /u/ac/grw/remote2/.project getOutputStream: append: 0 channelPool.size() -> 1 thread: Thread-0 MyPipedOutputStream.close MyPipedOutputStream.close wait done release, channelPool.size() -> 0 java.lang.InterruptedException thread: Thread-0 FETCHINFO: /u/ac/grw/remote2/.project fetchRemoteAttr channelPool.size() -> 0 thread: Thread-0 at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireInterruptibly(AbstractQueuedSynchronizer.java:1135) at java.util.concurrent.locks.ReentrantLock.lockInterruptibly(ReentrantLock.java:312) at java.util.concurrent.ArrayBlockingQueue.put(ArrayBlockingQueue.java:248) at org.eclipse.ptp.remotetools.internal.ssh.Connection.releaseSFTPChannel(Connection.java:661) at org.eclipse.ptp.remotetools.internal.ssh.FileTools.releaseSFTPChannel(FileTools.java:67) at org.eclipse.ptp.remotetools.internal.ssh.FileTools.access$0(FileTools.java:66) at org.eclipse.ptp.remotetools.internal.ssh.FileTools$SftpCallable.finalizeCmdInThread(FileTools.java:744) at org.eclipse.ptp.remotetools.internal.ssh.FileTools$SftpCallable.access$0(FileTools.java:743) at org.eclipse.ptp.remotetools.internal.ssh.FileTools$MyPipedOutputStream.close(FileTools.java:423) at org.eclipse.core.internal.utils.FileUtil.safeClose(FileUtil.java:196) at org.eclipse.core.internal.utils.FileUtil.transferStreams(FileUtil.java:249) at org.eclipse.core.internal.localstore.FileSystemResourceManager.write(FileSystemResourceManager.java:981) at org.eclipse.core.internal.localstore.FileSystemResourceManager.internalWrite(FileSystemResourceManager.java:549) at org.eclipse.core.internal.resources.Project.writeDescription(Project.java:1196) at org.eclipse.core.internal.resources.Project.setDescription(Project.java:1085) at org.eclipse.core.internal.resources.Project.setDescription(Project.java:1109) at org.eclipse.cdt.make.internal.core.BuildInfoFactory$BuildInfoProject.putString(BuildInfoFactory.java:490) at org.eclipse.cdt.make.internal.core.BuildInfoFactory$AbstractBuildInfo.setUseDefaultBuildCmd(BuildInfoFactory.java:66) at org.eclipse.ptp.rdt.core.resources.RemoteMakeNature.configure(RemoteMakeNature.java:185) at org.eclipse.core.internal.resources.NatureManager$1.run(NatureManager.java:143) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) at org.eclipse.core.internal.resources.NatureManager.configureNature(NatureManager.java:158) at org.eclipse.core.internal.resources.NatureManager.configureNatures(NatureManager.java:203) at org.eclipse.core.internal.resources.Project.basicSetDescription(Project.java:86) at org.eclipse.core.internal.resources.Project.setDescription(Project.java:1081) at org.eclipse.core.internal.resources.Project.setDescription(Project.java:1109) at org.eclipse.ptp.rdt.core.resources.RemoteMakeNature.addNature(RemoteMakeNature.java:59) at org.eclipse.ptp.rdt.ui.wizards.RemoteMakefileWizardHandler.createProject(RemoteMakefileWizardHandler.java:108) at org.eclipse.cdt.ui.wizards.CDTCommonProjectWizard$1$1$1.run(CDTCommonProjectWizard.java:257) at org.eclipse.ui.actions.WorkspaceModifyDelegatingOperation.execute(WorkspaceModifyDelegatingOperation.java:69) at org.eclipse.ui.actions.WorkspaceModifyOperation$1.run(WorkspaceModifyOperation.java:106) at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1982) at org.eclipse.ui.actions.WorkspaceModifyOperation.run(WorkspaceModifyOperation.java:118) at org.eclipse.jface.operation.ModalContext.runInCurrentThread(ModalContext.java:464) at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:372) at org.eclipse.jface.wizard.WizardDialog.run(WizardDialog.java:944) at org.eclipse.cdt.ui.wizards.CDTCommonProjectWizard$1$1.run(CDTCommonProjectWizard.java:266) at org.eclipse.ui.internal.UILockListener.doPendingWork(UILockListener.java:155) at org.eclipse.ui.internal.UISynchronizer$3.run(UISynchronizer.java:158) at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134) at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3530) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3226) at org.eclipse.jface.operation.ModalContext$ModalContextThread.block(ModalContext.java:173) at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:388) at org.eclipse.jface.wizard.WizardDialog.run(WizardDialog.java:944) at org.eclipse.cdt.ui.wizards.CDTCommonProjectWizard.invokeRunnable(CDTCommonProjectWizard.java:179) at org.eclipse.cdt.ui.wizards.CDTCommonProjectWizard.getProject(CDTCommonProjectWizard.java:157) at org.eclipse.cdt.ui.wizards.CDTCommonProjectWizard.performFinish(CDTCommonProjectWizard.java:195) at org.eclipse.jface.wizard.WizardDialog.finishPressed(WizardDialog.java:752) at org.eclipse.jface.wizard.WizardDialog.buttonPressed(WizardDialog.java:373) at org.eclipse.jface.dialogs.Dialog$2.widgetSelected(Dialog.java:624) at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:228) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) at org.eclipse.swt.widgets.Display.sendEvent(Display.java:3706) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1314) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1337) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1322) at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1136) at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3566) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3224) at org.eclipse.jface.window.Window.runEventLoop(Window.java:825) at org.eclipse.jface.window.Window.open(Window.java:801) at org.eclipse.ui.internal.navigator.wizards.WizardShortcutAction.run(WizardShortcutAction.java:98) at org.eclipse.jface.action.Action.runWithEvent(Action.java:498) at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:584) at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:501) at org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:411) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) at org.eclipse.swt.widgets.Display.sendEvent(Display.java:3706) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1314) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1337) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1322) at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1136) at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3566) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3224) at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2407) at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2371) at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2220) at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:493) at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:115) at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:367) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) 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.eclipse.equinox.launcher.Main.invokeFramework(Main.java:611) at org.eclipse.equinox.launcher.Main.basicRun(Main.java:566) at org.eclipse.equinox.launcher.Main.run(Main.java:1363) at org.eclipse.equinox.launcher.Main.main(Main.java:1339) SFTPChannelPool currently empty. Thread will have to wait till other thread releases a channel. java.lang.InterruptedException release, channelPool.size() -> 0 thread: Thread-0 at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.reportInterruptAfterWait(AbstractQueuedSynchronizer.java:1899) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1934) at java.util.concurrent.ArrayBlockingQueue.take(ArrayBlockingQueue.java:317) at org.eclipse.ptp.remotetools.internal.ssh.Connection.getSFTPChannel(Connection.java:639) at org.eclipse.ptp.remotetools.internal.ssh.FileTools.getSFTPChannel(FileTools.java:63) at org.eclipse.ptp.remotetools.internal.ssh.FileTools.access$2(FileTools.java:62) at org.eclipse.ptp.remotetools.internal.ssh.FileTools$SftpCallable.asyncCmdInThread(FileTools.java:710) at org.eclipse.ptp.remotetools.internal.ssh.FileTools$SftpCallable.syncCmdInThread(FileTools.java:756) at org.eclipse.ptp.remotetools.internal.ssh.FileTools$SftpCallable.access$3(FileTools.java:753) at org.eclipse.ptp.remotetools.internal.ssh.FileTools.fetchRemoteAttr(FileTools.java:783) at org.eclipse.ptp.remotetools.internal.ssh.RemoteItem.refreshAttributes(RemoteItem.java:154) at org.eclipse.ptp.remote.remotetools.core.RemoteToolsFileStore.getRemoteItem(RemoteToolsFileStore.java:573) at org.eclipse.ptp.remote.remotetools.core.RemoteToolsFileStore.fetchInfo(RemoteToolsFileStore.java:191) at org.eclipse.core.filesystem.provider.FileStore.fetchInfo(FileStore.java:277) at org.eclipse.core.internal.localstore.FileSystemResourceManager.write(FileSystemResourceManager.java:983) at org.eclipse.core.internal.localstore.FileSystemResourceManager.internalWrite(FileSystemResourceManager.java:549) at org.eclipse.core.internal.resources.Project.writeDescription(Project.java:1196) at org.eclipse.core.internal.resources.Project.setDescription(Project.java:1085) at org.eclipse.core.internal.resources.Project.setDescription(Project.java:1109) at org.eclipse.cdt.make.internal.core.BuildInfoFactory$BuildInfoProject.putString(BuildInfoFactory.java:490) at org.eclipse.cdt.make.internal.core.BuildInfoFactory$AbstractBuildInfo.setUseDefaultBuildCmd(BuildInfoFactory.java:66) at org.eclipse.ptp.rdt.core.resources.RemoteMakeNature.configure(RemoteMakeNature.java:185) at org.eclipse.core.internal.resources.NatureManager$1.run(NatureManager.java:143) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) at org.eclipse.core.internal.resources.NatureManager.configureNature(NatureManager.java:158) at org.eclipse.core.internal.resources.NatureManager.configureNatures(NatureManager.java:203) at org.eclipse.core.internal.resources.Project.basicSetDescription(Project.java:86) at org.eclipse.core.internal.resources.Project.setDescription(Project.java:1081) at org.eclipse.core.internal.resources.Project.setDescription(Project.java:1109) at org.eclipse.ptp.rdt.core.resources.RemoteMakeNature.addNature(RemoteMakeNature.java:59) at org.eclipse.ptp.rdt.ui.wizards.RemoteMakefileWizardHandler.createProject(RemoteMakefileWizardHandler.java:108) at org.eclipse.cdt.ui.wizards.CDTCommonProjectWizard$1$1$1.run(CDTCommonProjectWizard.java:257) at org.eclipse.ui.actions.WorkspaceModifyDelegatingOperation.execute(WorkspaceModifyDelegatingOperation.java:69) at org.eclipse.ui.actions.WorkspaceModifyOperation$1.run(WorkspaceModifyOperation.java:106) at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1982) at org.eclipse.ui.actions.WorkspaceModifyOperation.run(WorkspaceModifyOperation.java:118) at org.eclipse.jface.operation.ModalContext.runInCurrentThread(ModalContext.java:464) at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:372) at org.eclipse.jface.wizard.WizardDialog.run(WizardDialog.java:944) at org.eclipse.cdt.ui.wizards.CDTCommonProjectWizard$1$1.run(CDTCommonProjectWizard.java:266) at org.eclipse.ui.internal.UILockListener.doPendingWork(UILockListener.java:155) at org.eclipse.ui.internal.UISynchronizer$3.run(UISynchronizer.java:158) at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134) at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3530) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3226) at org.eclipse.jface.operation.ModalContext$ModalContextThread.block(ModalContext.java:173) at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:388) at org.eclipse.jface.wizard.WizardDialog.run(WizardDialog.java:944) at org.eclipse.cdt.ui.wizards.CDTCommonProjectWizard.invokeRunnable(CDTCommonProjectWizard.java:179) at org.eclipse.cdt.ui.wizards.CDTCommonProjectWizard.getProject(CDTCommonProjectWizard.java:157) at org.eclipse.cdt.ui.wizards.CDTCommonProjectWizard.performFinish(CDTCommonProjectWizard.java:195) at org.eclipse.jface.wizard.WizardDialog.finishPressed(WizardDialog.java:752) at org.eclipse.jface.wizard.WizardDialog.buttonPressed(WizardDialog.java:373) at org.eclipse.jface.dialogs.Dialog$2.widgetSelected(Dialog.java:624) at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:228) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) at org.eclipse.swt.widgets.Display.sendEvent(Display.java:3706) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1314) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1337) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1322) at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1136) at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3566) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3224) at org.eclipse.jface.window.Window.runEventLoop(Window.java:825) at org.eclipse.jface.window.Window.open(Window.java:801) at org.eclipse.ui.internal.navigator.wizards.WizardShortcutAction.run(WizardShortcutAction.java:98) at org.eclipse.jface.action.Action.runWithEvent(Action.java:498) at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:584) at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:501) at org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:411) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) at org.eclipse.swt.widgets.Display.sendEvent(Display.java:3706) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1314) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1337) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1322) at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1136) at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3566) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3224) at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2407) at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2371) at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2220) at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:493) at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:115) at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:367) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) 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.eclipse.equinox.launcher.Main.invokeFramework(Main.java:611) at org.eclipse.equinox.launcher.Main.basicRun(Main.java:566) at org.eclipse.equinox.launcher.Main.run(Main.java:1363) at org.eclipse.equinox.launcher.Main.main(Main.java:1339) org.eclipse.ptp.remotetools.exception.RemoteOperationException: java.lang.NullPointerException at org.eclipse.ptp.remotetools.internal.ssh.FileTools.fetchRemoteAttr(FileTools.java:793) at org.eclipse.ptp.remotetools.internal.ssh.RemoteItem.refreshAttributes(RemoteItem.java:154) at org.eclipse.ptp.remote.remotetools.core.RemoteToolsFileStore.getRemoteItem(RemoteToolsFileStore.java:573) at org.eclipse.ptp.remote.remotetools.core.RemoteToolsFileStore.fetchInfo(RemoteToolsFileStore.java:191) at org.eclipse.core.filesystem.provider.FileStore.fetchInfo(FileStore.java:277) at org.eclipse.core.internal.localstore.FileSystemResourceManager.write(FileSystemResourceManager.java:983) at org.eclipse.core.internal.localstore.FileSystemResourceManager.internalWrite(FileSystemResourceManager.java:549) at org.eclipse.core.internal.resources.Project.writeDescription(Project.java:1196) at org.eclipse.core.internal.resources.Project.setDescription(Project.java:1085) at org.eclipse.core.internal.resources.Project.setDescription(Project.java:1109) at org.eclipse.cdt.make.internal.core.BuildInfoFactory$BuildInfoProject.putString(BuildInfoFactory.java:490) at org.eclipse.cdt.make.internal.core.BuildInfoFactory$AbstractBuildInfo.setUseDefaultBuildCmd(BuildInfoFactory.java:66) at org.eclipse.ptp.rdt.core.resources.RemoteMakeNature.configure(RemoteMakeNature.java:185) at org.eclipse.core.internal.resources.NatureManager$1.run(NatureManager.java:143) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) at org.eclipse.core.internal.resources.NatureManager.configureNature(NatureManager.java:158) at org.eclipse.core.internal.resources.NatureManager.configureNatures(NatureManager.java:203) at org.eclipse.core.internal.resources.Project.basicSetDescription(Project.java:86) at org.eclipse.core.internal.resources.Project.setDescription(Project.java:1081) at org.eclipse.core.internal.resources.Project.setDescription(Project.java:1109) at org.eclipse.ptp.rdt.core.resources.RemoteMakeNature.addNature(RemoteMakeNature.java:59) at org.eclipse.ptp.rdt.ui.wizards.RemoteMakefileWizardHandler.createProject(RemoteMakefileWizardHandler.java:108) at org.eclipse.cdt.ui.wizards.CDTCommonProjectWizard$1$1$1.run(CDTCommonProjectWizard.java:257) at org.eclipse.ui.actions.WorkspaceModifyDelegatingOperation.execute(WorkspaceModifyDelegatingOperation.java:69) at org.eclipse.ui.actions.WorkspaceModifyOperation$1.run(WorkspaceModifyOperation.java:106) at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1982) at org.eclipse.ui.actions.WorkspaceModifyOperation.run(WorkspaceModifyOperation.java:118) at org.eclipse.jface.operation.ModalContext.runInCurrentThread(ModalContext.java:464) at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:372) at org.eclipse.jface.wizard.WizardDialog.run(WizardDialog.java:944) at org.eclipse.cdt.ui.wizards.CDTCommonProjectWizard$1$1.run(CDTCommonProjectWizard.java:266) at org.eclipse.ui.internal.UILockListener.doPendingWork(UILockListener.java:155) at org.eclipse.ui.internal.UISynchronizer$3.run(UISynchronizer.java:158) at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134) at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3530) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3226) at org.eclipse.jface.operation.ModalContext$ModalContextThread.block(ModalContext.java:173) at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:388) at org.eclipse.jface.wizard.WizardDialog.run(WizardDialog.java:944) at org.eclipse.cdt.ui.wizards.CDTCommonProjectWizard.invokeRunnable(CDTCommonProjectWizard.java:179) at org.eclipse.cdt.ui.wizards.CDTCommonProjectWizard.getProject(CDTCommonProjectWizard.java:157) at org.eclipse.cdt.ui.wizards.CDTCommonProjectWizard.performFinish(CDTCommonProjectWizard.java:195) at org.eclipse.jface.wizard.WizardDialog.finishPressed(WizardDialog.java:752) at org.eclipse.jface.wizard.WizardDialog.buttonPressed(WizardDialog.java:373) at org.eclipse.jface.dialogs.Dialog$2.widgetSelected(Dialog.java:624) at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:228) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) at org.eclipse.swt.widgets.Display.sendEvent(Display.java:3706) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1314) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1337) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1322) at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1136) at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3566) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3224) at org.eclipse.jface.window.Window.runEventLoop(Window.java:825) at org.eclipse.jface.window.Window.open(Window.java:801) at org.eclipse.ui.internal.navigator.wizards.WizardShortcutAction.run(WizardShortcutAction.java:98) at org.eclipse.jface.action.Action.runWithEvent(Action.java:498) at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:584) at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:501) at org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:411) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) at org.eclipse.swt.widgets.Display.sendEvent(Display.java:3706) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1314) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1337) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1322) at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1136) at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3566) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3224) at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2407) at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2371) at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2220) at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:493) at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:115) at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:367) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) 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.eclipse.equinox.launcher.Main.invokeFramework(Main.java:611) at org.eclipse.equinox.launcher.Main.basicRun(Main.java:566) at org.eclipse.equinox.launcher.Main.run(Main.java:1363) at org.eclipse.equinox.launcher.Main.main(Main.java:1339) Caused by: java.lang.NullPointerException at org.eclipse.ptp.remotetools.internal.ssh.FileTools$8.call(FileTools.java:780) at org.eclipse.ptp.remotetools.internal.ssh.FileTools$8.call(FileTools.java:1) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) at java.util.concurrent.FutureTask.run(FutureTask.java:138) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:637) GETCHILD: .project GETCHILD: .project FETCHINFO: /u/ac/grw/remote2/.project GETCHILD: .project OPENINPUTSTREAM: /u/ac/grw/remote2/.project OPENINPUTSTREAM: File doesn't exist GETCHILD: .project FETCHINFO: /u/ac/grw/remote2/.project GETCHILD: .project GETPARENT: /u/ac/grw/remote2/.project MKDIR: /u/ac/grw/remote2 OPENOUTPUTSTREAM: /u/ac/grw/remote2/.project getOutputStream: append: 0 channelPool.size() -> 0 thread: Thread-0 SFTPChannelPool currently empty. Thread will have to wait till other thread releases a channel. java.lang.InterruptedException at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.reportInterruptAfterWait(AbstractQueuedSynchronizer.java:1899) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1934) at java.util.concurrent.ArrayBlockingQueue.take(ArrayBlockingQueue.java:317) at org.eclipse.ptp.remotetools.internal.ssh.Connection.getSFTPChannel(Connection.java:639) at org.eclipse.ptp.remotetools.internal.ssh.FileTools.getSFTPChannel(FileTools.java:63) at org.eclipse.ptp.remotetools.internal.ssh.FileTools.access$2(FileTools.java:62) at org.eclipse.ptp.remotetools.internal.ssh.FileTools$SftpCallable.asyncCmdInThread(FileTools.java:710) at org.eclipse.ptp.remotetools.internal.ssh.FileTools$SftpCallable.access$4(FileTools.java:706) at org.eclipse.ptp.remotetools.internal.ssh.FileTools.getOutputStream(FileTools.java:378) at org.eclipse.ptp.remote.remotetools.core.RemoteToolsFileStore.openOutputStream(RemoteToolsFileStore.java:365) at org.eclipse.core.internal.localstore.FileSystemResourceManager.write(FileSystemResourceManager.java:980) at org.eclipse.core.internal.localstore.FileSystemResourceManager.internalWrite(FileSystemResourceManager.java:549) at org.eclipse.core.internal.resources.Project.writeDescription(Project.java:1196) at org.eclipse.core.internal.resources.Project.setDescription(Project.java:1085) at org.eclipse.core.internal.resources.Project.setDescription(Project.java:1109) at org.eclipse.cdt.make.internal.core.BuildInfoFactory$BuildInfoProject.putString(BuildInfoFactory.java:490) at org.eclipse.cdt.make.internal.core.BuildInfoFactory$AbstractBuildInfo.setStopOnError(BuildInfoFactory.java:201) at org.eclipse.ptp.rdt.core.resources.RemoteMakeNature.configure(RemoteMakeNature.java:186) at org.eclipse.core.internal.resources.NatureManager$1.run(NatureManager.java:143) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) at org.eclipse.core.internal.resources.NatureManager.configureNature(NatureManager.java:158) at org.eclipse.core.internal.resources.NatureManager.configureNatures(NatureManager.java:203) at org.eclipse.core.internal.resources.Project.basicSetDescription(Project.java:86) at org.eclipse.core.internal.resources.Project.setDescription(Project.java:1081) at org.eclipse.core.internal.resources.Project.setDescription(Project.java:1109) at org.eclipse.ptp.rdt.core.resources.RemoteMakeNature.addNature(RemoteMakeNature.java:59) at org.eclipse.ptp.rdt.ui.wizards.RemoteMakefileWizardHandler.createProject(RemoteMakefileWizardHandler.java:108) at org.eclipse.cdt.ui.wizards.CDTCommonProjectWizard$1$1$1.run(CDTCommonProjectWizard.java:257) at org.eclipse.ui.actions.WorkspaceModifyDelegatingOperation.execute(WorkspaceModifyDelegatingOperation.java:69) at org.eclipse.ui.actions.WorkspaceModifyOperation$1.run(WorkspaceModifyOperation.java:106) at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1982) at org.eclipse.ui.actions.WorkspaceModifyOperation.run(WorkspaceModifyOperation.java:118) at org.eclipse.jface.operation.ModalContext.runInCurrentThread(ModalContext.java:464) at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:372) at org.eclipse.jface.wizard.WizardDialog.run(WizardDialog.java:944) at org.eclipse.cdt.ui.wizards.CDTCommonProjectWizard$1$1.run(CDTCommonProjectWizard.java:266) at org.eclipse.ui.internal.UILockListener.doPendingWork(UILockListener.java:155) at org.eclipse.ui.internal.UISynchronizer$3.run(UISynchronizer.java:158) at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134) at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3530) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3226) at org.eclipse.jface.operation.ModalContext$ModalContextThread.block(ModalContext.java:173) at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:388) at org.eclipse.jface.wizard.WizardDialog.run(WizardDialog.java:944) at org.eclipse.cdt.ui.wizards.CDTCommonProjectWizard.invokeRunnable(CDTCommonProjectWizard.java:179) at org.eclipse.cdt.ui.wizards.CDTCommonProjectWizard.getProject(CDTCommonProjectWizard.java:157) at org.eclipse.cdt.ui.wizards.CDTCommonProjectWizard.performFinish(CDTCommonProjectWizard.java:195) at org.eclipse.jface.wizard.WizardDialog.finishPressed(WizardDialog.java:752) at org.eclipse.jface.wizard.WizardDialog.buttonPressed(WizardDialog.java:373) at org.eclipse.jface.dialogs.Dialog$2.widgetSelected(Dialog.java:624) at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:228) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) at org.eclipse.swt.widgets.Display.sendEvent(Display.java:3706) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1314) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1337) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1322) at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1136) at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3566) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3224) at org.eclipse.jface.window.Window.runEventLoop(Window.java:825) at org.eclipse.jface.window.Window.open(Window.java:801) at org.eclipse.ui.internal.navigator.wizards.WizardShortcutAction.run(WizardShortcutAction.java:98) at org.eclipse.jface.action.Action.runWithEvent(Action.java:498) at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:584) at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:501) at org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:411) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) at org.eclipse.swt.widgets.Display.sendEvent(Display.java:3706) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1314) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1337) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1322) at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1136) at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3566) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3224) at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2407) at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2371) at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2220) at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:493) at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:115) at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:367) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) 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.eclipse.equinox.launcher.Main.invokeFramework(Main.java:611) at org.eclipse.equinox.launcher.Main.basicRun(Main.java:566) at org.eclipse.equinox.launcher.Main.run(Main.java:1363) at org.eclipse.equinox.launcher.Main.main(Main.java:1339) MyPipedOutputStream.close MyPipedOutputStream.close: java.lang.NullPointerException release, channelPool.size() -> 0 thread: Thread-0 at org.eclipse.ptp.remotetools.internal.ssh.FileTools$4.call(FileTools.java:371) at org.eclipse.ptp.remotetools.internal.ssh.FileTools$4.call(FileTools.java:1) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) at java.util.concurrent.FutureTask.run(FutureTask.java:138) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:637) FETCHINFO: /u/ac/grw/remote2 channelPool.size() -> 0 thread: Worker-10 SFTPChannelPool currently empty. Thread will have to wait till other thread releases a channel.
I tried again, this time I got a hang but no exceptions, though it doesn't seem to be in the place as last time. Here is the last part of the trace: GETCHILD: .cproject FETCHINFO: /u/ac/grw/remote3/.cproject GETCHILD: .cproject FETCHINFO: /u/ac/grw/remote3/.cproject GETCHILD: .cproject FETCHINFO: /u/ac/grw/remote3/.cproject GETCHILD: .cproject OPENOUTPUTSTREAM: /u/ac/grw/remote3/.cproject getOutputStream: append: 0 channelPool.size() -> 3 thread: Thread-0 MyPipedOutputStream.close MyPipedOutputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 FETCHINFO: /u/ac/grw/remote3/.cproject fetchRemoteAttr channelPool.size() -> 3 thread: Thread-0 release, channelPool.size() -> 2 thread: Thread-0 -rw-r--r-- 41404 14696 12208 Wed Feb 03 18:39:21 EST 2010 GETCHILD: .cproject GETCHILD: .cproject OPENINPUTSTREAM: /u/ac/grw/remote3/.cproject channelPool.size() -> 3 thread: Thread-0 MyPipedInputStream.close MyPipedInputStream.close wait done release, channelPool.size() -> 2 thread: Thread-0 MyPipedInputStream.close MyPipedInputStream.close wait done release, channelPool.size() -> 3 thread: Thread-0
Created attachment 158260 [details] replaced Piped-Stream by ByteArray-Stream We replaced the Piped-Streams by ByteArray-Streams. This prevents any InterruptedException and also simplifies the code. Let us know whether it now also works for you. Remaining problems I see: 1) The UI still freezes: I suggest to use IProgressService.run within syncCmdInThread 2) It overwrites files modified remote 3) The speed could be better I guess 2+3 should be each addressed in a separate bug.
I was able to successfully create 5 remote projects in a row, so it looks like the latest patch is solid. Well done! At this stage, I don't think it's worth doing a patch for 3.0 as we really need to concentrate on getting 4.0 ready for the Helios release in June.
Created attachment 158378 [details] as 158260 - not blocking GUI I tried to use PlatformUI.getWorkbench().getProgressService().run in syncCmdInThread but couldn't get the Exceptions to work correctly. I only uncommented it, because it would be cleaner if someone knows how to make the exceptions work correctly. Instead this patch just calls Display.getCurrent().readAndDispatch() to make sure the UI doesn't get frozen. Otherwise this patch is identical then the previous one.
Created attachment 158379 [details] patch for release branch It was easy to generate a patch for the release branch and thus I went ahead and made one. The difference to the HEAD patch is that the ProgressMonitor is not passed along everywhere to not change the interface.
Created attachment 158542 [details] added Copyright notice to patch Should we remove the debugging information at this point? Or should we leave it in until shortly before release? Will you apply the patch I prepared for the release branch?
Yes, please remove the debugging information. I will add the patches to both HEAD and the 3.0 branch as soon as the legal clearance is done.
Created attachment 158787 [details] patch without debugging for release branch
Created attachment 158788 [details] patch without debugging - head branch
Looking at the code in FileTools.java, I notice that you're importing com.sun.xml.internal.ws.util.CompletedFuture. This looks like it's an internal package, and I'm getting access restrictions on the import. Is there a non-internal version, or something else that can be used? Also, is there any way to get around the call to isMainThread(), for example, is it possible to use the same code in the main thread as in any other thread? The reason is that isMainThread has a dependency on UI packages. The convention is that core packages should not depend on the UI if possible.
(In reply to comment #60) > Looking at the code in FileTools.java, I notice that you're importing > com.sun.xml.internal.ws.util.CompletedFuture. This looks like it's an internal > package, and I'm getting access restrictions on the import. Is there a > non-internal version, or something else that can be used? Since the code is not under EPL we can't copy it. Otherwise this would sense since it is a tiny class. I don't get any access violations. Where is the difference? Do you have the Import-Package: org.eclipse.swt.widgets, org.eclipse.ui in org.eclipse.ptp.remotetools.core/META-INF/MANIFEST.MF? > > Also, is there any way to get around the call to isMainThread(), for example, > is it possible to use the same code in the main thread as in any other thread? > The reason is that isMainThread has a dependency on UI packages. The convention > is that core packages should not depend on the UI if possible. Yes it would be possible to always use the main thread code. But it would mean unnecessary overhead because it would always do the file operations in a different thread even when not required.
I think the access violations come because CompletedFuture it is not visible in JRE 1.5. Please make sure you have your JRE set to 1.5 not 1.6. We definitely don't want dependencies on swt or ui in a core package. I tried just using the main thread code and it seems to work fine, so whatever overhead it causes is minimal. I'll take the other code out when I commit. Also, this has the additional benefit of not requiring CompletedFuture any longer, so we don't have the issue any more.
(In reply to comment #62) > I think the access violations come because CompletedFuture it is not visible in > JRE 1.5. Please make sure you have your JRE set to 1.5 not 1.6. > > We definitely don't want dependencies on swt or ui in a core package. I tried > just using the main thread code and it seems to work fine, so whatever overhead > it causes is minimal. I'll take the other code out when I commit. Also, this > has the additional benefit of not requiring CompletedFuture any longer, so we > don't have the issue any more. The overhead is: - having to have additional threads in the ThreadPool - have to activate a thread from the pool for each IO operation - have to schedule out the working thread for each IO operation (sleep operation) I don't know how much overhead (measured in time) this is. What is annoying is that the whole thing should not be required. File-IO operations shouldn't be on the main thread. Because they are not guaranteed to finish in a specific amount of time. Thus this is a work-around for that code in which IO operations are not in a worker-thread as they should be. Now by always using the main thread code, this work-around is used even for IO operations, which are correctly done in worker threads.
I agree it's not ideal, but then the fix should really be in jsch not here. Let's stay with this and see how it goes. We can always add the thread checking code back in later.
(In reply to comment #64) > I agree it's not ideal, but then the fix should really be in jsch not here. > Let's stay with this and see how it goes. We can always add the thread checking > code back in later. Back when we did this workaround I was a little skeptical if to whether we shouldn't wait for the jsch guys to fix it at their end. I guess creating our own branch of jsch is out of the question?
(In reply to comment #65) > (In reply to comment #64) > > I agree it's not ideal, but then the fix should really be in jsch not here. > > Let's stay with this and see how it goes. We can always add the thread checking > > code back in later. > > Back when we did this workaround I was a little skeptical if to whether we > shouldn't wait for the jsch guys to fix it at their end. I guess creating our > own branch of jsch is out of the question? While I think there is a bug in jsch I don't think it would help us if it was fixed. The NIO standard is (from Thread.interrupt api doc): "If this thread is blocked in an I/O operation upon an interruptible channel then the channel will be closed, the thread's interrupt status will be set, and the thread will receive a ClosedByInterruptException." Thus jsch should throw a ClosedByInterruptException ( or InterruptedIOException as piped-streams) instead of an SftpException and close the channel before doing so. But this would not help us. We could handle the exception easier, but this is not what we want to do. We don't want the IO-operation to be interrupted. Thus I don't see it as a bug in Jsch. Instead I see it as a bug in Eclipse, because: 1) The Java standard says IO (since java.nio) operations are allowed to throw ClosedByInterruptException 2) Eclipse uses Thread.interrupt from Display.syncExec 3) The Eclipse programming doesn't disallow IO operations on the main thread - and there are places in the Eclipse core where this is done 4) The Eclipse core does not have special handling for ClosedByInterruptException which would e.g. restart the IO operation after executing the syncExec task. Thus when a IO operation follows the java.nio standard to throw ClosedByInterruptException it will fail when during the IO-operation the Display.syncExec method is called from another thread. Because a work-around is described in 4) wouldn't make much sense and IO operations are anyhow not guaranteed to finish after a limited amount of time, I consider it a bug in Eclipse that it is not prohibited to have IO operations on the main thread. The question is whether it is worth to file a bug against the Eclipse core, or whether this is something which won't be fixed anyhow.
I just saw that the native SVN for eclipse (SVNKit) is not using Jsch but instead Ganymed as SSH-2 Java Library. And Ganymed ignores InterruptedException and thus doesn't suffer from this problem. Thus instead of the workaround with the additional thread, one could use Ganymed insead of Jsch as SVNKit does.
(In reply to comment #62) > I think the access violations come because CompletedFuture it is not visible in > JRE 1.5. Please make sure you have your JRE set to 1.5 not 1.6. Yes. I had only the JDK Compiler compliance level set to 1.5. > We definitely don't want dependencies on swt or ui in a core package. I tried > just using the main thread code and it seems to work fine, so whatever overhead > it causes is minimal. I'll take the other code out when I commit. Also, this > has the additional benefit of not requiring CompletedFuture any longer, so we > don't have the issue any more. I just tried and for me it didn't work. I just always used the main branch. Did you do anything else? Can you attach the patch with your modification? (In reply to comment #64) > I agree it's not ideal, but then the fix sh hould really be in jsch not here. > Let's stay with this and see how it goes. We can always add the thread checking > code back in later. As it seems that JSch doesn't want to fix it: What do you think about testing out Ganymed?
(In reply to comment #68) > > I agree it's not ideal, but then the fix sh hould really be in jsch not here. > > Let's stay with this and see how it goes. We can always add the thread > checking > > code back in later. > As it seems that JSch doesn't want to fix it: What do you think about testing > out Ganymed? We'd need to get Ganymed approved through the Eclipse legal process. It's possible they may not approve it, which may be why SVNKit is not part of the SVN plugins but must be downloaded separately. Also, I couldn't see an API to do remote tunneling. There's one for local tunnels, but we need to be able to set up a tunnel on the remote host (for proxy/debugger connections).
Created attachment 163524 [details] FileTools.java without UI code
(In reply to comment #70) > Created an attachment (id=163524) [details] > FileTools.java without UI code It looks the same as what I have done. You also changed messages.properties relative to my patch so I can't compile. Could you please include it ( and any other files you modified) in the patch?
Created attachment 163950 [details] latest version of patch
Created attachment 163971 [details] patch as Greg's. Additional thread-pool static, including all files needed Greg, your latest patch also works on my machine. Weird that it didn't work when I made the same change. Since it has been quite a bit reorganized it is not easy to see what exactly has changed. I attached another patch. You didn't include all files. Specifically those in the two other affected projects (remotetools.environment.launcher, remote.remotetools.core). Both changed because of the additional monitor argument to the FileTools methods. I changed one thing: You made the pool variable non-static. That doesn't make much sense, because that why the thread-pool is recreated every-time a SftpCallable is created. And thus would defeat the purpose of having a thread pool.
Oops. Good catch.
Committed to HEAD. Roland, would you be able to do another patch that doesn't include the API changes? Thanks.
(In reply to comment #75) > Committed to HEAD. Roland, would you be able to do another patch that doesn't > include the API changes? Thanks. It is not something quick to do. Connection.java and RemoteItem.java diverged quite a bit between HEAD and PTP_3_0. This wasn't a problem last time I did it. This is a problem because the way I did it last time was: - Create a patch with all the changes in HEAD - Apply that patch to PTP_3_0 - Remove API changes - Create patch without api changes My first problem: I didn't know how to create a patch with all your sftp changes in HEAD in all files. But it was easy to solve with the GIT ;-) But now I have a lot of conflicts to fix. Thus my question: Is it important to have this in PTP_3_0? Last time you said it is not high priority.
Created attachment 164793 [details] patch for 3.0 branch
Can you take a look at the attached patch to see if I've caught everything? Thanks.
(In reply to comment #78) > Can you take a look at the attached patch to see if I've caught everything? > Thanks. Sorry. Kind of forgot about this. Yes I think it looks all correct. One think I noticed will checking the code. AbstractRemoteExecution:waitForEndOfExecution I think it should be: } catch (InterruptedException e) { Thread.currentThread().interrupt() // Ignore spurious interrupts } It is OK to ignore the interrupt but one should set the interrupted flag. If you agree this should be fixed both in HEAD and in the released branch.
Sure, please fix. I think this bug can be closed after that.
Release patch commited. Interrupted Flag set on release and HEAD branch.