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);
}
}