1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-22 14:12:10 +02:00

Bug 409890 - Launch is not terminated when an error occurs in

FinalLaunchSequence

Change-Id: I96e8c377ffefa87bd6ab71d01965a255f9ebce11
Reviewed-on: https://git.eclipse.org/r/13753
Reviewed-by: Marc Khouzam <marc.khouzam@ericsson.com>
IP-Clean: Marc Khouzam <marc.khouzam@ericsson.com>
Tested-by: Marc Khouzam <marc.khouzam@ericsson.com>
Reviewed-by: Mikhail Khodjaiants <mikhailkhod@googlemail.com>
IP-Clean: Mikhail Khodjaiants <mikhailkhod@googlemail.com>
Tested-by: Mikhail Khodjaiants <mikhailkhod@googlemail.com>
This commit is contained in:
Aleem Rehman 2013-06-12 13:32:46 -04:00 committed by Mikhail Khodjaiants
parent 2a97605918
commit b93e00da7d

View file

@ -29,6 +29,7 @@ import org.eclipse.cdt.dsf.concurrent.ImmediateExecutor;
import org.eclipse.cdt.dsf.concurrent.ImmediateRequestMonitor;
import org.eclipse.cdt.dsf.concurrent.RequestMonitor;
import org.eclipse.cdt.dsf.concurrent.Sequence;
import org.eclipse.cdt.dsf.concurrent.Sequence.Step;
import org.eclipse.cdt.dsf.concurrent.ThreadSafe;
import org.eclipse.cdt.dsf.concurrent.ThreadSafeAndProhibitedFromDsfExecutor;
import org.eclipse.cdt.dsf.debug.model.DsfLaunch;
@ -219,8 +220,8 @@ public class GdbLaunch extends DsfLaunch
///////////////////////////////////////////////////////////////////////////
/**
* Shuts down the services, the session and the executor associated with
* this launch.
* Terminates the gdb session, shuts down the services, the session and
* the executor associated with this launch.
* <p>
* Note: The argument request monitor to this method should NOT use the
* executor that belongs to this launch. By the time the shutdown is
@ -238,7 +239,7 @@ public class GdbLaunch extends DsfLaunch
}
fShutDown = true;
Sequence shutdownSeq = new ShutdownSequence(
final Sequence shutdownSeq = new ShutdownSequence(
getDsfExecutor(), fSession.getId(),
new RequestMonitor(fSession.getExecutor(), rm) {
@Override
@ -281,7 +282,35 @@ public class GdbLaunch extends DsfLaunch
rm.done();
}
});
fExecutor.execute(shutdownSeq);
final Step[] steps = new Step[] {
new Step() {
@Override
public void execute(RequestMonitor rm) {
IGDBControl control = fTracker.getService(IGDBControl.class);
if (control == null) {
rm.done();
return;
}
control.terminate(rm);
}
},
new Step() {
@Override
public void execute(RequestMonitor rm) {
fExecutor.execute(shutdownSeq);
}
}
};
fExecutor.execute(new Sequence(fExecutor) {
@Override
public Step[] getSteps() {
return steps;
}
});
}
@SuppressWarnings("rawtypes")