1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-14 20:45:22 +02:00

[197848] Fix shell terminated state when remote dies

This commit is contained in:
Martin Oberhuber 2007-08-03 14:32:55 +00:00
parent 4911ba3872
commit f1764e6689
2 changed files with 21 additions and 7 deletions

View file

@ -12,7 +12,7 @@
* Emily Bruner, Mazen Faraj, Adrian Storisteanu, Li Ding, and Kent Hawley. * Emily Bruner, Mazen Faraj, Adrian Storisteanu, Li Ding, and Kent Hawley.
* *
* Contributors: * Contributors:
* {Name} (company) - description of contribution. * Martin Oberhuber (Wind River) - [197848] Fix shell terminated state when remote dies
*******************************************************************************/ *******************************************************************************/
package org.eclipse.rse.services.shells; package org.eclipse.rse.services.shells;
@ -132,7 +132,6 @@ public abstract class AbstractHostShellOutputReader extends Thread implements I
} }
} }
public void fireOutputChanged(IHostShellChangeEvent event) public void fireOutputChanged(IHostShellChangeEvent event)
{ {
for (int i = 0; i < _listeners.size(); i++) for (int i = 0; i < _listeners.size(); i++)
@ -158,7 +157,6 @@ public abstract class AbstractHostShellOutputReader extends Thread implements I
{ {
if (_keepRunning) if (_keepRunning)
{ {
_waitIncrement = 0; _waitIncrement = 0;
//dispose(); //dispose();
} }
@ -172,15 +170,18 @@ public abstract class AbstractHostShellOutputReader extends Thread implements I
{ {
Thread.sleep(_waitIncrement); Thread.sleep(_waitIncrement);
Thread.yield(); Thread.yield();
handle();
} }
catch (InterruptedException e) catch (InterruptedException e)
{ {
e.printStackTrace();
finish(); finish();
return; _keepRunning = false;
} }
}
handle(); if (!isErrorReader()) {
//Bug 197848: Fire empty event as notification that we are done
HostShellChangeEvent event = new HostShellChangeEvent(_hostShell, this, 0, 0);
fireOutputChanged(event);
} }
} }

View file

@ -13,6 +13,7 @@
* Contributors: * Contributors:
* Martin Oberhuber (Wind River) - [168975] Move RSE Events API to Core * Martin Oberhuber (Wind River) - [168975] Move RSE Events API to Core
* Martin Oberhuber (Wind River) - [186773] split ISystemRegistryUI from ISystemRegistry * Martin Oberhuber (Wind River) - [186773] split ISystemRegistryUI from ISystemRegistry
* Martin Oberhuber (Wind River) - [197848] Fix shell terminated state when remote dies
********************************************************************************/ ********************************************************************************/
package org.eclipse.rse.internal.subsystems.shells.servicesubsystem; package org.eclipse.rse.internal.subsystems.shells.servicesubsystem;
@ -24,6 +25,7 @@ import org.eclipse.rse.core.RSECorePlugin;
import org.eclipse.rse.core.events.ISystemResourceChangeEvents; import org.eclipse.rse.core.events.ISystemResourceChangeEvents;
import org.eclipse.rse.core.events.SystemResourceChangeEvent; import org.eclipse.rse.core.events.SystemResourceChangeEvent;
import org.eclipse.rse.core.model.ISystemRegistry; import org.eclipse.rse.core.model.ISystemRegistry;
import org.eclipse.rse.core.subsystems.ISubSystem;
import org.eclipse.rse.internal.subsystems.shells.core.ShellStrings; import org.eclipse.rse.internal.subsystems.shells.core.ShellStrings;
import org.eclipse.rse.subsystems.shells.core.subsystems.IRemoteCommandShell; import org.eclipse.rse.subsystems.shells.core.subsystems.IRemoteCommandShell;
import org.eclipse.rse.subsystems.shells.core.subsystems.IRemoteOutput; import org.eclipse.rse.subsystems.shells.core.subsystems.IRemoteOutput;
@ -87,6 +89,17 @@ public class OutputRefreshJob extends UIJob
registry.fireEvent( registry.fireEvent(
new SystemResourceChangeEvent(_command, ISystemResourceChangeEvents.EVENT_PROPERTY_CHANGE, _command.getCommandSubSystem())); new SystemResourceChangeEvent(_command, ISystemResourceChangeEvents.EVENT_PROPERTY_CHANGE, _command.getCommandSubSystem()));
} }
//Bug 197848: Artificial event for shell termination
if (_outputs.length == 0 && !_command.isActive()) {
ISubSystem subsys = _command.getCommandSubSystem();
//update action states in commands view
registry.fireEvent(
new SystemResourceChangeEvent(_command, ISystemResourceChangeEvents.EVENT_COMMAND_SHELL_FINISHED, subsys));
//update "connected" overlay in SystemView
registry.fireEvent(
new SystemResourceChangeEvent(_command, ISystemResourceChangeEvents.EVENT_REFRESH, subsys));
}
} }
} }
catch (Exception e) catch (Exception e)