1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-08-06 07:45:50 +02:00

When gdb is kill start a new thread to handle termination.

This commit is contained in:
Alain Magloire 2002-08-26 05:14:25 +00:00
parent b975a9ba5a
commit 325d3c4061

View file

@ -20,7 +20,7 @@ import org.eclipse.cdt.debug.mi.core.command.MIExecStepInstruction;
import org.eclipse.cdt.debug.mi.core.command.MIExecUntil; import org.eclipse.cdt.debug.mi.core.command.MIExecUntil;
import org.eclipse.cdt.debug.mi.core.event.MIBreakpointEvent; import org.eclipse.cdt.debug.mi.core.event.MIBreakpointEvent;
import org.eclipse.cdt.debug.mi.core.event.MIEvent; import org.eclipse.cdt.debug.mi.core.event.MIEvent;
import org.eclipse.cdt.debug.mi.core.event.MIExitEvent; import org.eclipse.cdt.debug.mi.core.event.MIGDBExitEvent;
import org.eclipse.cdt.debug.mi.core.event.MIFunctionFinishedEvent; import org.eclipse.cdt.debug.mi.core.event.MIFunctionFinishedEvent;
import org.eclipse.cdt.debug.mi.core.event.MIInferiorExitEvent; import org.eclipse.cdt.debug.mi.core.event.MIInferiorExitEvent;
import org.eclipse.cdt.debug.mi.core.event.MILocationReachedEvent; import org.eclipse.cdt.debug.mi.core.event.MILocationReachedEvent;
@ -72,12 +72,22 @@ MIPlugin.getDefault().debugLog(line);
} }
} catch (IOException e) { } catch (IOException e) {
//e.printStackTrace(); //e.printStackTrace();
// This code should be executed when gdb been abruptly
// or unxepectedly killed. This is detected by checking
// if the channelInputStream is not null. In normal case
// session.terminate() will set the channelInputStream to null.
if (session.getChannelInputStream() != null) { if (session.getChannelInputStream() != null) {
Runnable cleanup = new Runnable() {
public void run() {
// Change the state of the inferior.
session.getMIInferior().setTerminated(); session.getMIInferior().setTerminated();
session.terminate(); session.terminate();
} }
} finally { };
//fireEvent(new MIExitEvent()); Thread clean = new Thread(cleanup, "GDB Died");
clean.setDaemon(true);
clean.start();
}
} }
} }
@ -122,10 +132,10 @@ MIPlugin.getDefault().debugLog(line);
} }
session.getMIInferior().setRunning(); session.getMIInferior().setRunning();
MIEvent event = new MIRunningEvent(type); MIEvent event = new MIRunningEvent(type);
fireEvent(event); session.fireEvent(event);
} else if ("exit".equals(state)) { } else if ("exit".equals(state)) {
//session.getMIInferior().setTerminated(); //session.getMIInferior().setTerminated();
//MIEvent event = new MIExitEvent(); //MIEvent event = new MIGDBExitEvent();
//fireEvent(event); //fireEvent(event);
} else if ("connected".equals(state)) { } else if ("connected".equals(state)) {
session.getMIInferior().setConnected(); session.getMIInferior().setConnected();
@ -161,7 +171,7 @@ MIPlugin.getDefault().debugLog(line);
} }
MIEvent[] events = (MIEvent[])list.toArray(new MIEvent[list.size()]); MIEvent[] events = (MIEvent[])list.toArray(new MIEvent[list.size()]);
fireEvents(events); session.fireEvents(events);
} }
} }
@ -340,13 +350,4 @@ MIPlugin.getDefault().debugLog(line);
return event; return event;
} }
public void fireEvents(MIEvent[] events) {
for (int i = 0; i < events.length; i++) {
fireEvent(events[i]);
}
}
public void fireEvent(MIEvent event) {
session.getEventQueue().addItem(event);
}
} }