Bug 560682: [Py4J] Debug tests are unstable
improve dispatcher job termination
Change-Id: I0461fddaad7677821ef4478c2392339d423e4493
diff --git a/plugins/org.eclipse.ease/src/org/eclipse/ease/debugging/dispatcher/EventDispatchJob.java b/plugins/org.eclipse.ease/src/org/eclipse/ease/debugging/dispatcher/EventDispatchJob.java
index 9d05c4f..c86a934 100644
--- a/plugins/org.eclipse.ease/src/org/eclipse/ease/debugging/dispatcher/EventDispatchJob.java
+++ b/plugins/org.eclipse.ease/src/org/eclipse/ease/debugging/dispatcher/EventDispatchJob.java
@@ -26,6 +26,7 @@
import org.eclipse.ease.debugging.IScriptRegistry;
import org.eclipse.ease.debugging.ScriptRegistry;
import org.eclipse.ease.debugging.events.IDebugEvent;
+import org.eclipse.ease.debugging.events.debugger.EngineTerminatedEvent;
import org.eclipse.ease.debugging.events.debugger.IDebuggerEvent;
import org.eclipse.ease.debugging.events.model.IModelRequest;
import org.eclipse.jface.dialogs.ErrorDialog;
@@ -123,7 +124,7 @@
if ((monitor.isCanceled()) || (!platformRunning))
terminate();
- if (event != null) {
+ else if (event != null) {
try {
handleEvent(event);
} catch (final Throwable e) {
@@ -149,6 +150,9 @@
DebugTracer.debug("Dispatcher", "debugger -> " + event + " -> model");
fModel.handleEvent(event);
+ if (event instanceof EngineTerminatedEvent)
+ terminate();
+
} else if (event instanceof IModelRequest) {
DebugTracer.debug("Dispatcher", "debugger <- " + event + " <- model");
fDebugger.handleEvent(event);
diff --git a/tests/org.eclipse.ease.testhelper/src/org/eclipse/ease/testhelper/AbstractDebugTest.java b/tests/org.eclipse.ease.testhelper/src/org/eclipse/ease/testhelper/AbstractDebugTest.java
index 91eed32..cfeaa2b 100644
--- a/tests/org.eclipse.ease.testhelper/src/org/eclipse/ease/testhelper/AbstractDebugTest.java
+++ b/tests/org.eclipse.ease.testhelper/src/org/eclipse/ease/testhelper/AbstractDebugTest.java
@@ -502,7 +502,7 @@
fScriptEngine.executeAsync(getFile(MAIN_SCRIPT));
final int suspendedEvents = runUntilTerminated(fScriptEngine, () -> {
- getDebugTarget().disconnect();
+ elementProvider.getDebugElement().disconnect();
assertTrue(getDebugTarget().isDisconnected());
assertTrue(getProcess().isDisconnected());