From 09fc8554a19f36bf9ded0be21610879f486c8856 Mon Sep 17 00:00:00 2001 From: Michael Scharf Date: Fri, 11 Jul 2008 22:51:40 +0000 Subject: [PATCH] RESOLVED - bug 240420: [terminal][ssh]Channel is not closed when the connection is closed with the close button https://bugs.eclipse.org/bugs/show_bug.cgi?id=240420 Handle disconnect before fSession has been assigned --- .../eclipse/tm/internal/terminal/ssh/SshConnection.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/terminal/org.eclipse.tm.terminal.ssh/src/org/eclipse/tm/internal/terminal/ssh/SshConnection.java b/terminal/org.eclipse.tm.terminal.ssh/src/org/eclipse/tm/internal/terminal/ssh/SshConnection.java index e8508d7786b..7046fb7dc5c 100644 --- a/terminal/org.eclipse.tm.terminal.ssh/src/org/eclipse/tm/internal/terminal/ssh/SshConnection.java +++ b/terminal/org.eclipse.tm.terminal.ssh/src/org/eclipse/tm/internal/terminal/ssh/SshConnection.java @@ -48,6 +48,7 @@ class SshConnection extends Thread { private final ITerminalControl fControl; private final SshConnector fConn; private Session fSession; + private boolean fDisconnectHasBeenCalled; protected SshConnection(SshConnector conn,ITerminalControl control) { super("SshConnection-"+fgNo++); //$NON-NLS-1$ fControl = control; @@ -120,7 +121,9 @@ class SshConnection extends Thread { session.setServerAliveInterval(nKeepalive); //default is 5 minutes } session.connect(nTimeout); // making connection with timeout. - + // if we got disconnected, do not continue + if(!isSessionConnected()) + return; ChannelShell channel=(ChannelShell) session.openChannel("shell"); //$NON-NLS-1$ channel.setPtyType("ansi"); //$NON-NLS-1$ channel.connect(); @@ -152,7 +155,7 @@ class SshConnection extends Thread { } private synchronized boolean isSessionConnected() { - return fSession != null && fSession.isConnected(); + return fDisconnectHasBeenCalled || (fSession != null && fSession.isConnected()); } /** @@ -161,6 +164,7 @@ class SshConnection extends Thread { void disconnect() { interrupt(); synchronized (this) { + fDisconnectHasBeenCalled=true; if(fSession!=null) { try { fSession.disconnect();