Bug 497254 - Make sure we clean up properly on terminal disconnect.

Both in cases where the disconnect action is invoked, or when the
output stream terminates.

Change-Id: Icc5e842dc8573a00ce57d726b2878a948e01251d
diff --git a/bundles/org.eclipse.remote.console/src/org/eclipse/remote/internal/console/TerminalConsoleConnector.java b/bundles/org.eclipse.remote.console/src/org/eclipse/remote/internal/console/TerminalConsoleConnector.java
index 2d27b99..e524e4b 100644
--- a/bundles/org.eclipse.remote.console/src/org/eclipse/remote/internal/console/TerminalConsoleConnector.java
+++ b/bundles/org.eclipse.remote.console/src/org/eclipse/remote/internal/console/TerminalConsoleConnector.java
@@ -61,13 +61,14 @@
 						}
 					}
 				}
-				setState(TerminalState.CLOSED);
-				synchronized (TerminalConsoleConnector.this) {
-					outThread = null;
-				}
 			} catch (IOException e) {
 				Activator.log(e);
 			}
+
+			synchronized (TerminalConsoleConnector.this) {
+				outThread = null;
+				disconnect();
+			}
 		}
 	}
 
@@ -135,7 +136,7 @@
 							remoteProcess = connection.getService(IRemoteCommandShellService.class)
 									.getCommandShell(IRemoteProcessBuilder.ALLOCATE_PTY);
 						} catch (IOException e) {
-							Activator.log(e);
+							disconnect();
 							return new Status(IStatus.ERROR, Activator.PLUGIN_ID, e.getLocalizedMessage(), e);
 						}
 					}
@@ -165,9 +166,13 @@
 				@Override
 				protected IStatus run(IProgressMonitor monitor) {
 					remoteProcess.destroy();
+					remoteProcess = null;
+					setState(TerminalState.CLOSED);
 					return Status.OK_STATUS;
 				}
 			}.schedule();
+		} else {
+			setState(TerminalState.CLOSED);
 		}
 	}