From a348175717fd443a33585c5ce00f6b09cf9bca2d Mon Sep 17 00:00:00 2001 From: Michael Scharf Date: Mon, 22 Oct 2007 04:57:11 +0000 Subject: [PATCH] bug 206892: [terminal][serial] Incorrect connected state when COM port is owned by another terminal https://bugs.eclipse.org/bugs/show_bug.cgi?id=206892 applied patch provided by Martin Oberhuber --- .../terminal/serial/SerialConnector.java | 10 ++++++++-- .../tm/internal/terminal/view/TerminalView.java | 16 +++++++++------- .../terminal/emulator/VT100TerminalControl.java | 6 ++++-- 3 files changed, 21 insertions(+), 11 deletions(-) diff --git a/org.eclipse.tm.terminal.serial/src/org/eclipse/tm/internal/terminal/serial/SerialConnector.java b/org.eclipse.tm.terminal.serial/src/org/eclipse/tm/internal/terminal/serial/SerialConnector.java index f637a34d7ff..2a3dfd00a93 100644 --- a/org.eclipse.tm.terminal.serial/src/org/eclipse/tm/internal/terminal/serial/SerialConnector.java +++ b/org.eclipse.tm.terminal.serial/src/org/eclipse/tm/internal/terminal/serial/SerialConnector.java @@ -13,6 +13,7 @@ * Contributors: * Michael Scharf (Wind River) - extracted from TerminalControl * Martin Oberhuber (Wind River) - fixed copyright headers and beautified + * Martin Oberhuber (Wind River) - [206892] Dont connect if already connecting *******************************************************************************/ package org.eclipse.tm.internal.terminal.serial; @@ -41,6 +42,7 @@ public class SerialConnector implements ITerminalConnector { private CommPortIdentifier fSerialPortIdentifier; private SerialPortHandler fTerminalSerialPortHandler; private SerialSettings fSettings; + private SerialConnectWorker fConnectWorker; public SerialConnector() { } public SerialConnector(SerialSettings settings) { @@ -56,9 +58,13 @@ public class SerialConnector implements ITerminalConnector { } public void connect(ITerminalControl control) { Logger.log("entered."); //$NON-NLS-1$ + if (fConnectWorker!=null && fConnectWorker.isAlive()) { + //already connecting + return; + } + fConnectWorker = new SerialConnectWorker(this, control); fControl=control; - SerialConnectWorker worker = new SerialConnectWorker(this, control); - worker.start(); + fConnectWorker.start(); } public void disconnect() { Logger.log("entered."); //$NON-NLS-1$ diff --git a/org.eclipse.tm.terminal.view/src/org/eclipse/tm/internal/terminal/view/TerminalView.java b/org.eclipse.tm.terminal.view/src/org/eclipse/tm/internal/terminal/view/TerminalView.java index 4a8442ba142..80b0d0608a9 100644 --- a/org.eclipse.tm.terminal.view/src/org/eclipse/tm/internal/terminal/view/TerminalView.java +++ b/org.eclipse.tm.terminal.view/src/org/eclipse/tm/internal/terminal/view/TerminalView.java @@ -13,6 +13,7 @@ * Contributors: * Michael Scharf (Wind River) - split into core, view and connector plugins * Martin Oberhuber (Wind River) - fixed copyright headers and beautified + * Martin Oberhuber (Wind River) - [206892] State handling: Only allow connect when CLOSED *******************************************************************************/ package org.eclipse.tm.internal.terminal.view; @@ -212,7 +213,8 @@ public class TerminalView extends ViewPart implements ITerminalView, ITerminalLi } public void onTerminalConnect() { - if (isConnected()) + //if (isConnected()) + if (fCtlTerminal.getState()!=TerminalState.CLOSED) return; if(fCtlTerminal.getTerminalConnectorInfo()==null) setConnector(showSettingsDialog()); @@ -226,13 +228,15 @@ public class TerminalView extends ViewPart implements ITerminalView, ITerminalLi } public void updateTerminalConnect() { - boolean bEnabled = ((!isConnecting()) && (!fCtlTerminal.isConnected())); + //boolean bEnabled = ((!isConnecting()) && (!fCtlTerminal.isConnected())); + boolean bEnabled = (fCtlTerminal.getState()==TerminalState.CLOSED); fActionTerminalConnect.setEnabled(bEnabled); } private boolean isConnecting() { - return fCtlTerminal.getState()==TerminalState.CONNECTING; + return fCtlTerminal.getState()==TerminalState.CONNECTING + || fCtlTerminal.getState()==TerminalState.OPENED; } private boolean isConnected() { return fCtlTerminal.getState()==TerminalState.CONNECTED; @@ -282,10 +286,8 @@ public class TerminalView extends ViewPart implements ITerminalView, ITerminalLi } public void updateTerminalSettings() { - boolean bEnabled; - - bEnabled = ((!isConnecting()) && (!fCtlTerminal - .isConnected())); + //boolean bEnabled = ((!isConnecting()) && (!fCtlTerminal.isConnected())); + boolean bEnabled = (fCtlTerminal.getState()==TerminalState.CLOSED); fActionTerminalSettings.setEnabled(bEnabled); } diff --git a/org.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/emulator/VT100TerminalControl.java b/org.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/emulator/VT100TerminalControl.java index e990dadc316..4adc5cb083a 100644 --- a/org.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/emulator/VT100TerminalControl.java +++ b/org.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/emulator/VT100TerminalControl.java @@ -13,6 +13,7 @@ * Contributors: * Michael Scharf (Wind River) - split into core, view and connector plugins * Martin Oberhuber (Wind River) - fixed copyright headers and beautified + * Martin Oberhuber (Wind River) - [206892] State handling: Only allow connect when CLOSED *******************************************************************************/ package org.eclipse.tm.internal.terminal.emulator; @@ -287,7 +288,7 @@ public class VT100TerminalControl implements ITerminalControlForText, ITerminalC if(getTerminalConnector()!=null) { getTerminalConnector().disconnect(); } - } + } // TODO private void waitForConnect() { @@ -655,7 +656,8 @@ public class VT100TerminalControl implements ITerminalControlForText, ITerminalC char character = event.character; - if (!isConnected()) { + //if (!isConnected()) { + if (fState!=TerminalState.CLOSED) { // Pressing ENTER while not connected causes us to connect. if (character == '\r') { connectTerminal();