Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
Bug 300889 - Using sftp instead of ssh exec of cat to transfer files
Summary: Using sftp instead of ssh exec of cat to transfer files
Status: RESOLVED FIXED
Alias: None
Product: PTP
Classification: Tools
Component: Remote Tools (show other bugs)
Version: 3.0   Edit
Hardware: All All
: P3 normal (vote)
Target Milestone: 3.0.1   Edit
Assignee: Greg Watson CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on: 297381
Blocks:
  Show dependency tree
 
Reported: 2010-01-26 13:18 EST by Roland Schulz CLA
Modified: 2011-05-14 06:42 EDT (History)
1 user (show)

See Also:


Attachments
Patch to use sftp for file up/download (7.57 KB, patch)
2010-01-26 13:20 EST, Roland Schulz CLA
g.watson: iplog+
Details | Diff
Replacement for earlier patch adding ChannelSftp queue (28.21 KB, patch)
2010-01-28 22:32 EST, Roland Schulz CLA
no flags Details | Diff
Patch as before without changing interface (24.25 KB, patch)
2010-01-29 09:34 EST, Roland Schulz CLA
no flags Details | Diff
Patch as before without changing interface - now relative to RELEASE (25.03 KB, patch)
2010-01-29 10:14 EST, Roland Schulz CLA
no flags Details | Diff
Patch including earlier changes + spanning thread if running on main thread (53.11 KB, patch)
2010-02-01 11:09 EST, Roland Schulz CLA
no flags Details | Diff
Patch including earlier changes + spanning thread if running on main thread v2 (63.62 KB, patch)
2010-02-01 16:18 EST, Roland Schulz CLA
no flags Details | Diff
as last patch with more debugging (12.59 KB, patch)
2010-02-02 18:57 EST, Roland Schulz CLA
no flags Details | Diff
as last patch with more debugging (now correct) (63.70 KB, patch)
2010-02-03 13:50 EST, Roland Schulz CLA
no flags Details | Diff
as last patch - hopefully bug fixed (63.79 KB, patch)
2010-02-03 15:58 EST, Roland Schulz CLA
no flags Details | Diff
as last patch - including Pipe closed exception fix (64.46 KB, patch)
2010-02-03 17:40 EST, Roland Schulz CLA
no flags Details | Diff
replaced Piped-Stream by ByteArray-Stream (68.85 KB, patch)
2010-02-04 23:23 EST, Roland Schulz CLA
no flags Details | Diff
as 158260 - not blocking GUI (70.97 KB, patch)
2010-02-06 11:17 EST, Roland Schulz CLA
no flags Details | Diff
patch for release branch (49.78 KB, patch)
2010-02-06 11:18 EST, Roland Schulz CLA
no flags Details | Diff
added Copyright notice to patch (71.54 KB, patch)
2010-02-08 19:42 EST, Roland Schulz CLA
no flags Details | Diff
patch without debugging for release branch (51.78 KB, patch)
2010-02-10 17:03 EST, Roland Schulz CLA
no flags Details | Diff
patch without debugging - head branch (73.25 KB, patch)
2010-02-10 17:05 EST, Roland Schulz CLA
no flags Details | Diff
FileTools.java without UI code (35.43 KB, patch)
2010-03-31 09:21 EDT, Greg Watson CLA
no flags Details | Diff
latest version of patch (86.19 KB, patch)
2010-04-06 14:58 EDT, Greg Watson CLA
no flags Details | Diff
patch as Greg's. Additional thread-pool static, including all files needed (98.26 KB, patch)
2010-04-06 17:42 EDT, Roland Schulz CLA
g.watson: iplog+
Details | Diff
patch for 3.0 branch (55.45 KB, patch)
2010-04-13 19:31 EDT, Greg Watson CLA
no flags Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Roland Schulz CLA 2010-01-26 13:18:37 EST
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
Comment 1 Roland Schulz CLA 2010-01-26 13:20:10 EST
Created attachment 157318 [details]
Patch to use sftp for file up/download
Comment 2 Greg Watson CLA 2010-01-26 14:30:14 EST
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!
Comment 3 Greg Watson CLA 2010-01-26 20:07:11 EST
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
Comment 4 Roland Schulz CLA 2010-01-28 11:22:01 EST
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.
Comment 5 Greg Watson CLA 2010-01-28 11:33:46 EST
Great. Should I apply this patch, or wait for the new one?
Comment 6 Roland Schulz CLA 2010-01-28 12:26:30 EST
(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.
Comment 7 Roland Schulz CLA 2010-01-28 22:32:08 EST
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?
Comment 8 Greg Watson CLA 2010-01-29 09:01:18 EST
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.
Comment 9 Roland Schulz CLA 2010-01-29 09:14:01 EST
(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
Comment 10 Roland Schulz CLA 2010-01-29 09:34:29 EST
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.
Comment 11 Roland Schulz CLA 2010-01-29 10:14:08 EST
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.
Comment 12 Greg Watson CLA 2010-01-29 10:55:01 EST
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
Comment 13 Roland Schulz CLA 2010-01-29 10:59:26 EST
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.
Comment 14 Greg Watson CLA 2010-01-29 11:32:03 EST
Yes, the workaround sounds like a good approach. Please go ahead.
Comment 15 Dieter Krachtus CLA 2010-01-29 12:05:20 EST
(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
Comment 16 Greg Watson CLA 2010-01-29 12:40:14 EST
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.
Comment 17 Dieter Krachtus CLA 2010-01-29 12:47:27 EST
(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.
Comment 18 Greg Watson CLA 2010-01-29 12:52:08 EST
I think that would be better. We can do another bug fix release in a week or 2 that includes this.
Comment 19 Roland Schulz CLA 2010-01-29 12:54:18 EST
(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.
Comment 20 Dieter Krachtus CLA 2010-01-29 13:20:50 EST
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
Comment 21 Greg Watson CLA 2010-01-29 13:34:36 EST
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();
    }
Comment 22 Greg Watson CLA 2010-01-29 13:41:30 EST
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.
Comment 23 Roland Schulz CLA 2010-01-29 17:28:31 EST
(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;
	}
Comment 24 Dieter Krachtus CLA 2010-01-29 19:27:08 EST
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)
Comment 25 Roland Schulz CLA 2010-01-29 19:37:18 EST
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);
		}
		
	}
Comment 26 Greg Watson CLA 2010-02-01 10:32:53 EST
(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.
Comment 27 Greg Watson CLA 2010-02-01 10:42:17 EST
(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?
Comment 28 Roland Schulz CLA 2010-02-01 11:09:58 EST
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.
Comment 29 Greg Watson CLA 2010-02-01 12:00:10 EST
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
Comment 30 Roland Schulz CLA 2010-02-01 12:26:45 EST
(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.
Comment 31 Greg Watson CLA 2010-02-01 12:39:30 EST
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
Comment 32 Roland Schulz CLA 2010-02-01 12:48:13 EST
(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.
Comment 33 Greg Watson CLA 2010-02-01 13:10:53 EST
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.
Comment 34 Dieter Krachtus CLA 2010-02-01 13:47:22 EST
(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?
Comment 35 Greg Watson CLA 2010-02-01 14:26:22 EST
(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.
Comment 36 Roland Schulz CLA 2010-02-01 16:18:30 EST
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
Comment 37 Greg Watson CLA 2010-02-01 17:14:15 EST
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
Comment 38 Greg Watson CLA 2010-02-01 17:15:30 EST
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
Comment 39 Roland Schulz CLA 2010-02-02 10:21:40 EST
(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.
Comment 40 Greg Watson CLA 2010-02-02 11:36:39 EST
Send patch if you like. I can test easily.
Comment 41 Roland Schulz CLA 2010-02-02 18:57:16 EST
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?
Comment 42 Dieter Krachtus CLA 2010-02-02 20:09:09 EST
(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.
Comment 43 Greg Watson CLA 2010-02-03 10:52:53 EST
(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.
Comment 44 Roland Schulz CLA 2010-02-03 11:34:01 EST
(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.
Comment 45 Greg Watson CLA 2010-02-03 13:04:31 EST
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.
Comment 46 Roland Schulz CLA 2010-02-03 13:50:44 EST
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.
Comment 47 Greg Watson CLA 2010-02-03 14:35:27 EST
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
Comment 48 Roland Schulz CLA 2010-02-03 15:58:39 EST
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.
Comment 49 Roland Schulz CLA 2010-02-03 17:40:04 EST
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.
Comment 50 Greg Watson CLA 2010-02-03 18:36:11 EST
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.
Comment 51 Greg Watson CLA 2010-02-03 18:47:09 EST
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
Comment 52 Roland Schulz CLA 2010-02-04 23:23:56 EST
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.
Comment 53 Greg Watson CLA 2010-02-05 09:58:45 EST
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.
Comment 54 Roland Schulz CLA 2010-02-06 11:17:03 EST
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.
Comment 55 Roland Schulz CLA 2010-02-06 11:18:54 EST
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.
Comment 56 Roland Schulz CLA 2010-02-08 19:42:49 EST
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?
Comment 57 Greg Watson CLA 2010-02-10 14:36:47 EST
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.
Comment 58 Roland Schulz CLA 2010-02-10 17:03:19 EST
Created attachment 158787 [details]
patch without debugging
for release branch
Comment 59 Roland Schulz CLA 2010-02-10 17:05:12 EST
Created attachment 158788 [details]
patch without debugging - head branch
Comment 60 Greg Watson CLA 2010-03-04 16:30:01 EST
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.
Comment 61 Roland Schulz CLA 2010-03-06 14:25:10 EST
(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.
Comment 62 Greg Watson CLA 2010-03-08 16:03:43 EST
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.
Comment 63 Roland Schulz CLA 2010-03-10 12:06:46 EST
(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.
Comment 64 Greg Watson CLA 2010-03-10 13:05:12 EST
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.
Comment 65 Dieter Krachtus CLA 2010-03-10 14:06:58 EST
(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?
Comment 66 Roland Schulz CLA 2010-03-10 14:39:26 EST
(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.
Comment 67 Roland Schulz CLA 2010-03-30 02:07:45 EDT
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.
Comment 68 Roland Schulz CLA 2010-03-31 00:20:33 EDT
(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?
Comment 69 Greg Watson CLA 2010-03-31 09:16:12 EDT
(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).
Comment 70 Greg Watson CLA 2010-03-31 09:21:52 EDT
Created attachment 163524 [details]
FileTools.java without UI code
Comment 71 Roland Schulz CLA 2010-04-01 20:12:33 EDT
(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?
Comment 72 Greg Watson CLA 2010-04-06 14:58:26 EDT
Created attachment 163950 [details]
latest version of patch
Comment 73 Roland Schulz CLA 2010-04-06 17:42:41 EDT
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.
Comment 74 Greg Watson CLA 2010-04-06 21:40:21 EDT
Oops. Good catch.
Comment 75 Greg Watson CLA 2010-04-08 17:48:05 EDT
Committed to HEAD. Roland, would you be able to do another patch that doesn't include the API changes? Thanks.
Comment 76 Roland Schulz CLA 2010-04-13 00:34:14 EDT
(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.
Comment 77 Greg Watson CLA 2010-04-13 19:31:49 EDT
Created attachment 164793 [details]
patch for 3.0 branch
Comment 78 Greg Watson CLA 2010-04-13 19:32:53 EDT
Can you take a look at the attached patch to see if I've caught everything? Thanks.
Comment 79 Roland Schulz CLA 2010-04-24 03:08:56 EDT
(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.
Comment 80 Greg Watson CLA 2010-04-28 10:07:10 EDT
Sure, please fix. I think this bug can be closed after that.
Comment 81 Roland Schulz CLA 2010-04-29 00:28:44 EDT
Release patch commited. Interrupted Flag set on release and HEAD branch.