From c730716a07e6ae78870ea38836274c3b7d1222b3 Mon Sep 17 00:00:00 2001 From: Martin Oberhuber < martin.oberhuber@windriver.com> Date: Wed, 8 Jun 2011 13:29:55 +0000 Subject: [PATCH] Bug 348700 - [terminal] Regression: Terminal is unusable after "Disconnect" --- releng/org.eclipse.tm.releng/maps/rse.map | 6 ++--- .../org.eclipse.tm.releng/maps/terminal.map | 8 +++--- .../emulator/VT100TerminalControl.java | 25 ++++++++----------- 3 files changed, 18 insertions(+), 21 deletions(-) diff --git a/releng/org.eclipse.tm.releng/maps/rse.map b/releng/org.eclipse.tm.releng/maps/rse.map index 34e89bba8bd..a4bed549773 100644 --- a/releng/org.eclipse.tm.releng/maps/rse.map +++ b/releng/org.eclipse.tm.releng/maps/rse.map @@ -1,15 +1,15 @@ !*************** PROJECT CONTRIBUTION ******************************************************** !*** Project's plugins, features and fragments -feature@org.eclipse.rse=v201106011538,:pserver:anonymous:none@dev.eclipse.org:/cvsroot/tools,,org.eclipse.tm.rse/features/org.eclipse.rse-feature +feature@org.eclipse.rse=v201106081330,:pserver:anonymous:none@dev.eclipse.org:/cvsroot/tools,,org.eclipse.tm.rse/features/org.eclipse.rse-feature feature@org.eclipse.rse.core=v201106011538,:pserver:anonymous:none@dev.eclipse.org:/cvsroot/tools,,org.eclipse.tm.rse/features/org.eclipse.rse.core-feature feature@org.eclipse.rse.dstore=v201106011538,:pserver:anonymous:none@dev.eclipse.org:/cvsroot/tools,,org.eclipse.tm.rse/features/org.eclipse.rse.dstore-feature feature@org.eclipse.rse.examples=v201103142315,:pserver:anonymous:none@dev.eclipse.org:/cvsroot/tools,,org.eclipse.tm.rse/examples/org.eclipse.rse.examples-feature feature@org.eclipse.rse.ftp=v201106011538,:pserver:anonymous:none@dev.eclipse.org:/cvsroot/tools,,org.eclipse.tm.rse/features/org.eclipse.rse.ftp-feature feature@org.eclipse.rse.local=v201103142315,:pserver:anonymous:none@dev.eclipse.org:/cvsroot/tools,,org.eclipse.tm.rse/features/org.eclipse.rse.local-feature -feature@org.eclipse.rse.sdk=v201106011538,:pserver:anonymous:none@dev.eclipse.org:/cvsroot/tools,,org.eclipse.tm.rse/features/org.eclipse.rse.sdk-feature +feature@org.eclipse.rse.sdk=v201106081330,:pserver:anonymous:none@dev.eclipse.org:/cvsroot/tools,,org.eclipse.tm.rse/features/org.eclipse.rse.sdk-feature feature@org.eclipse.rse.ssh=v201106011538,:pserver:anonymous:none@dev.eclipse.org:/cvsroot/tools,,org.eclipse.tm.rse/features/org.eclipse.rse.ssh-feature feature@org.eclipse.rse.telnet=v201106011538,:pserver:anonymous:none@dev.eclipse.org:/cvsroot/tools,,org.eclipse.tm.rse/features/org.eclipse.rse.telnet-feature -feature@org.eclipse.rse.terminals=v201106011538,:pserver:anonymous:none@dev.eclipse.org:/cvsroot/tools,,org.eclipse.tm.rse/features/org.eclipse.rse.terminals-feature +feature@org.eclipse.rse.terminals=v201106081330,:pserver:anonymous:none@dev.eclipse.org:/cvsroot/tools,,org.eclipse.tm.rse/features/org.eclipse.rse.terminals-feature feature@org.eclipse.rse.tests=v201106011538,:pserver:anonymous:none@dev.eclipse.org:/cvsroot/tools,,org.eclipse.tm.rse/tests/org.eclipse.rse.tests-feature feature@org.eclipse.rse.useractions=v201103142315,:pserver:anonymous:none@dev.eclipse.org:/cvsroot/tools,,org.eclipse.tm.rse/features/org.eclipse.rse.useractions-feature !!feature@org.eclipse.rse.useractions.wrapper=v20080609a,:pserver:anonymous:none@dev.eclipse.org:/cvsroot/tools,,org.eclipse.tm.rse/features/org.eclipse.rse.useractions.wrapper-feature diff --git a/releng/org.eclipse.tm.releng/maps/terminal.map b/releng/org.eclipse.tm.releng/maps/terminal.map index 61cfcbb84e5..acb1902c7d6 100644 --- a/releng/org.eclipse.tm.releng/maps/terminal.map +++ b/releng/org.eclipse.tm.releng/maps/terminal.map @@ -1,13 +1,13 @@ -feature@org.eclipse.tm.terminal=v201105231230,:pserver:anonymous:none@dev.eclipse.org:/cvsroot/tools,,org.eclipse.tm.core/terminal/org.eclipse.tm.terminal-feature +feature@org.eclipse.tm.terminal=v201106081330,:pserver:anonymous:none@dev.eclipse.org:/cvsroot/tools,,org.eclipse.tm.core/terminal/org.eclipse.tm.terminal-feature feature@org.eclipse.tm.terminal.local=v201103142315,:pserver:anonymous:none@dev.eclipse.org:/cvsroot/tools,,org.eclipse.tm.core/terminal/org.eclipse.tm.terminal.local-feature -feature@org.eclipse.tm.terminal.local.sdk=v201105231230,:pserver:anonymous:none@dev.eclipse.org:/cvsroot/tools,,org.eclipse.tm.core/terminal/org.eclipse.tm.terminal.local.sdk-feature -feature@org.eclipse.tm.terminal.sdk=v201105231230,:pserver:anonymous:none@dev.eclipse.org:/cvsroot/tools,,org.eclipse.tm.core/terminal/org.eclipse.tm.terminal.sdk-feature +feature@org.eclipse.tm.terminal.local.sdk=v201106081330,:pserver:anonymous:none@dev.eclipse.org:/cvsroot/tools,,org.eclipse.tm.core/terminal/org.eclipse.tm.terminal.local.sdk-feature +feature@org.eclipse.tm.terminal.sdk=v201106081330,:pserver:anonymous:none@dev.eclipse.org:/cvsroot/tools,,org.eclipse.tm.core/terminal/org.eclipse.tm.terminal.sdk-feature feature@org.eclipse.tm.terminal.serial=v201103142315,:pserver:anonymous:none@dev.eclipse.org:/cvsroot/tools,,org.eclipse.tm.core/terminal/org.eclipse.tm.terminal.serial-feature feature@org.eclipse.tm.terminal.ssh=v201103142315,:pserver:anonymous:none@dev.eclipse.org:/cvsroot/tools,,org.eclipse.tm.core/terminal/org.eclipse.tm.terminal.ssh-feature feature@org.eclipse.tm.terminal.telnet=v201103142315,:pserver:anonymous:none@dev.eclipse.org:/cvsroot/tools,,org.eclipse.tm.core/terminal/org.eclipse.tm.terminal.telnet-feature feature@org.eclipse.tm.terminal.test=v201103142315,:pserver:anonymous:none@dev.eclipse.org:/cvsroot/tools,,org.eclipse.tm.core/terminal/org.eclipse.tm.terminal.test-feature feature@org.eclipse.tm.terminal.view=v201103142315,:pserver:anonymous:none@dev.eclipse.org:/cvsroot/tools,,org.eclipse.tm.core/terminal/org.eclipse.tm.terminal.view-feature -plugin@org.eclipse.tm.terminal=v201105231230,:pserver:anonymous:none@dev.eclipse.org:/cvsroot/tools,,org.eclipse.tm.core/terminal/org.eclipse.tm.terminal +plugin@org.eclipse.tm.terminal=v201106081330,:pserver:anonymous:none@dev.eclipse.org:/cvsroot/tools,,org.eclipse.tm.core/terminal/org.eclipse.tm.terminal plugin@org.eclipse.tm.terminal.local=v201101042155,:pserver:anonymous:none@dev.eclipse.org:/cvsroot/tools,,org.eclipse.tm.core/terminal/org.eclipse.tm.terminal.local plugin@org.eclipse.tm.terminal.serial=v201101042155,:pserver:anonymous:none@dev.eclipse.org:/cvsroot/tools,,org.eclipse.tm.core/terminal/org.eclipse.tm.terminal.serial plugin@org.eclipse.tm.terminal.ssh=v201101042155,:pserver:anonymous:none@dev.eclipse.org:/cvsroot/tools,,org.eclipse.tm.core/terminal/org.eclipse.tm.terminal.ssh diff --git a/terminal/org.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/emulator/VT100TerminalControl.java b/terminal/org.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/emulator/VT100TerminalControl.java index 7629fbfe8cf..972939458a5 100644 --- a/terminal/org.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/emulator/VT100TerminalControl.java +++ b/terminal/org.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/emulator/VT100TerminalControl.java @@ -28,6 +28,7 @@ * Anton Leherbauer (Wind River) - [335021] Middle mouse button copy/paste does not work with the terminal * Max Stepanov (Appcelerator) - [339768] Fix ANSI code for PgUp / PgDn * Pawel Piech (Wind River) - [333613] "Job found still running" after shutdown + * Martin Oberhuber (Wind River) - [348700] Terminal unusable after disconnect *******************************************************************************/ package org.eclipse.tm.internal.terminal.emulator; @@ -347,9 +348,14 @@ public class VT100TerminalControl implements ITerminalControlForText, ITerminalC public void disconnectTerminal() { Logger.log("entered."); //$NON-NLS-1$ + //Disconnect the remote side first + if (getState()!=TerminalState.CLOSED) { + if(getTerminalConnector()!=null) { + getTerminalConnector().disconnect(); + } + } + //Ensure that a new Job can be started; then clean up old Job. - //TODO not sure whether the fInputStream needs to be cleaned too, - //or whether the Job could actually cancel in case the fInputStream is closed. Job job; synchronized(this) { job = fJob; @@ -358,22 +364,13 @@ public class VT100TerminalControl implements ITerminalControlForText, ITerminalC if (job!=null) { job.cancel(); // Join job to avoid leaving job running after workbench shutdown (333613). + // Interrupt to be fast enough; cannot close fInputStream since it is re-used (bug 348700). + Thread t = job.getThread(); + if(t!=null) t.interrupt(); try { - // The Job will check its cancel status after 500msec latest. But we still - // Interrupt the Job, such that it can join fast enough during Workbench shutdown (bug 333613). - // TODO closing fInputStream may seem more clean but causes problems (bug 348700). - Thread t = job.getThread(); - if(t!=null) t.interrupt(); job.join(); } catch (InterruptedException e) {} } - - if (getState()==TerminalState.CLOSED) { - return; - } - if(getTerminalConnector()!=null) { - getTerminalConnector().disconnect(); - } } // TODO