diff --git a/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/framework/SyncUtil.java b/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/framework/SyncUtil.java
index 6257566a45b..53d26830a00 100644
--- a/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/framework/SyncUtil.java
+++ b/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/framework/SyncUtil.java
@@ -20,6 +20,8 @@ import junit.framework.Assert;
import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
import org.eclipse.cdt.dsf.concurrent.Query;
+import org.eclipse.cdt.dsf.concurrent.ThreadSafeAndProhibitedFromDsfExecutor;
+import org.eclipse.cdt.dsf.datamodel.DMContexts;
import org.eclipse.cdt.dsf.datamodel.IDMContext;
import org.eclipse.cdt.dsf.debug.service.IExpressions;
import org.eclipse.cdt.dsf.debug.service.IFormattedValues;
@@ -27,12 +29,14 @@ import org.eclipse.cdt.dsf.debug.service.IBreakpoints.IBreakpointsTargetDMContex
import org.eclipse.cdt.dsf.debug.service.IExpressions.IExpressionDMContext;
import org.eclipse.cdt.dsf.debug.service.IFormattedValues.FormattedValueDMContext;
import org.eclipse.cdt.dsf.debug.service.IFormattedValues.IFormattedDataDMContext;
+import org.eclipse.cdt.dsf.debug.service.IProcesses;
import org.eclipse.cdt.dsf.debug.service.IProcesses.IProcessDMContext;
import org.eclipse.cdt.dsf.debug.service.IRunControl.IContainerDMContext;
import org.eclipse.cdt.dsf.debug.service.IRunControl.IExecutionDMContext;
import org.eclipse.cdt.dsf.debug.service.IRunControl.StepType;
import org.eclipse.cdt.dsf.debug.service.IStack.IFrameDMContext;
import org.eclipse.cdt.dsf.debug.service.command.ICommandControlService;
+import org.eclipse.cdt.dsf.gdb.service.command.IGDBControl;
import org.eclipse.cdt.dsf.mi.service.IMICommandControl;
import org.eclipse.cdt.dsf.mi.service.IMIExecutionDMContext;
import org.eclipse.cdt.dsf.mi.service.IMIProcesses;
@@ -68,6 +72,8 @@ public class SyncUtil {
private static IContainerDMContext fGdbContainerDmc;
private static IBreakpointsTargetDMContext fBreakpointsDmc;
+ private static IProcesses fProcessesService;
+ private static IGDBControl fGDBCtrl;
public static final int WAIT_FOREVER = ServiceEventWaitor.WAIT_FOREVER;
@@ -89,6 +95,8 @@ public class SyncUtil {
fRunControl = tracker.getService(MIRunControl.class);
fStack = tracker.getService(MIStack.class);
fExpressions = tracker.getService(IExpressions.class);
+ fProcessesService = tracker.getService(IProcesses.class);
+ fGDBCtrl = tracker.getService(IGDBControl.class);
fCommandFactory = tracker.getService(IMICommandControl.class).getCommandFactory();
@@ -519,4 +527,49 @@ public class SyncUtil {
return TestsPlugin.massageTimeout(value);
}
}
+
+ /**
+ * Utility method to return the process DM context. This can be used only by
+ * tests that deal with a single heavyweight process. If more than one
+ * process is available, this method will fail.
+ *
+ *
+ * This must NOT be called from the DSF executor.
+ *
+ * @return the process context
+ * @throws InterruptedException
+ */
+ @ThreadSafeAndProhibitedFromDsfExecutor("fSession.getExecutor()")
+ public static IProcessDMContext getProcessContext() throws InterruptedException {
+ assert !fProcessesService.getExecutor().isInExecutorThread();
+
+ final AsyncCompletionWaitor waitor = new AsyncCompletionWaitor();
+
+ fProcessesService.getExecutor().submit(new Runnable() {
+ public void run() {
+ fProcessesService.getProcessesBeingDebugged(fGDBCtrl.getContext(), new DataRequestMonitor(fProcessesService.getExecutor(), null) {
+ @Override
+ protected void handleCompleted() {
+ if (isSuccess()) {
+ IDMContext[] contexts = getData();
+ Assert.assertNotNull("invalid return value from service", contexts);
+ Assert.assertEquals("unexpected number of processes", contexts.length, 1);
+ IDMContext context = contexts[0];
+ IProcessDMContext processContext = DMContexts.getAncestorOfType(context, IProcessDMContext.class);
+ Assert.assertNotNull("unexpected process context type ", processContext);
+ waitor.setReturnInfo(processContext);
+ }
+ }
+
+ });
+ }
+ });
+
+
+
+ waitor.waitUntilDone(TestsPlugin.massageTimeout(2000));
+ Assert.assertTrue(waitor.getMessage(), waitor.isOK());
+ return (IProcessDMContext) waitor.getReturnInfo();
+ }
+
}
diff --git a/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/GDBProcessesTest.java b/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/GDBProcessesTest.java
index 9d35c7b80f9..1dc8ef52ef5 100644
--- a/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/GDBProcessesTest.java
+++ b/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/GDBProcessesTest.java
@@ -20,19 +20,16 @@ import java.util.regex.Pattern;
import org.eclipse.cdt.debug.core.ICDTLaunchConfigurationConstants;
import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
-import org.eclipse.cdt.dsf.concurrent.ThreadSafeAndProhibitedFromDsfExecutor;
-import org.eclipse.cdt.dsf.datamodel.DMContexts;
-import org.eclipse.cdt.dsf.datamodel.IDMContext;
import org.eclipse.cdt.dsf.debug.service.IProcesses.IProcessDMContext;
import org.eclipse.cdt.dsf.debug.service.IProcesses.IThreadDMContext;
import org.eclipse.cdt.dsf.debug.service.IProcesses.IThreadDMData;
-import org.eclipse.cdt.dsf.gdb.service.command.IGDBControl;
import org.eclipse.cdt.dsf.mi.service.IMIProcesses;
import org.eclipse.cdt.dsf.service.DsfServicesTracker;
import org.eclipse.cdt.dsf.service.DsfSession;
import org.eclipse.cdt.tests.dsf.gdb.framework.AsyncCompletionWaitor;
import org.eclipse.cdt.tests.dsf.gdb.framework.BackgroundRunner;
import org.eclipse.cdt.tests.dsf.gdb.framework.BaseTestCase;
+import org.eclipse.cdt.tests.dsf.gdb.framework.SyncUtil;
import org.eclipse.cdt.tests.dsf.gdb.launching.TestsPlugin;
import org.junit.After;
import org.junit.Assert;
@@ -56,7 +53,6 @@ public class GDBProcessesTest extends BaseTestCase {
private DsfSession fSession;
private DsfServicesTracker fServicesTracker;
- private IGDBControl fGdbCtrl;
private IMIProcesses fProcService;
/*
@@ -73,7 +69,6 @@ public class GDBProcessesTest extends BaseTestCase {
* Get the GDBProcesses & MIRunControl service.
*/
fProcService = fServicesTracker.getService(IMIProcesses.class);
- fGdbCtrl = fServicesTracker.getService(IGDBControl.class);
}
@After
@@ -112,7 +107,7 @@ public class GDBProcessesTest extends BaseTestCase {
* Ask the service to get model data for the process.
* There is only one process in case of GDB back end.
*/
- final IProcessDMContext processContext = getProcessContext();
+ final IProcessDMContext processContext = SyncUtil.getProcessContext();
fSession.getExecutor().submit(new Runnable() {
public void run() {
fProcService.getExecutionData(processContext, rm);
@@ -151,7 +146,7 @@ public class GDBProcessesTest extends BaseTestCase {
};
- final IProcessDMContext processContext = getProcessContext();
+ final IProcessDMContext processContext = SyncUtil.getProcessContext();
fProcService.getExecutor().submit(new Runnable() {
public void run() {
IThreadDMContext threadDmc = fProcService.createThreadContext(processContext, THREAD_ID);
@@ -175,48 +170,4 @@ public class GDBProcessesTest extends BaseTestCase {
fWait.waitReset();
}
-
- /**
- * Utility method to return the process DM context. These tests launch a
- * single process, thus only one such context is available.
- *
- *
- * This must not be called from the DSF executor.
- *
- * @return the process context
- * @throws InterruptedException
- */
- @ThreadSafeAndProhibitedFromDsfExecutor("fSession.getExecutor()")
- private IProcessDMContext getProcessContext() throws InterruptedException {
- assert !fSession.getExecutor().isInExecutorThread();
-
- final AsyncCompletionWaitor waitor = new AsyncCompletionWaitor();
-
- fProcService.getExecutor().submit(new Runnable() {
- public void run() {
- fProcService.getProcessesBeingDebugged(fGdbCtrl.getContext(), new DataRequestMonitor(fSession.getExecutor(), null) {
- @Override
- protected void handleCompleted() {
- if (isSuccess()) {
- IDMContext[] contexts = getData();
- Assert.assertNotNull("invalid return value from service", contexts);
- Assert.assertEquals("unexpected number of processes", contexts.length, 1);
- IDMContext context = contexts[0];
- IProcessDMContext processContext = DMContexts.getAncestorOfType(context, IProcessDMContext.class);
- Assert.assertNotNull("unexpected process context type ", processContext);
- waitor.setReturnInfo(processContext);
- }
- }
-
- });
- }
- });
-
-
-
-
- waitor.waitUntilDone(TestsPlugin.massageTimeout(2000));
- Assert.assertTrue(fWait.getMessage(), fWait.isOK());
- return (IProcessDMContext) waitor.getReturnInfo();
- }
}
diff --git a/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/MIRunControlTest.java b/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/MIRunControlTest.java
index 41c2e8e8f53..8293c14db6a 100644
--- a/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/MIRunControlTest.java
+++ b/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/MIRunControlTest.java
@@ -23,9 +23,6 @@ import java.util.LinkedList;
import org.eclipse.cdt.debug.core.ICDTLaunchConfigurationConstants;
import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
import org.eclipse.cdt.dsf.concurrent.RequestMonitor;
-import org.eclipse.cdt.dsf.concurrent.ThreadSafeAndProhibitedFromDsfExecutor;
-import org.eclipse.cdt.dsf.datamodel.DMContexts;
-import org.eclipse.cdt.dsf.datamodel.IDMContext;
import org.eclipse.cdt.dsf.debug.service.IProcesses.IProcessDMContext;
import org.eclipse.cdt.dsf.debug.service.IProcesses.IThreadDMContext;
import org.eclipse.cdt.dsf.debug.service.IRunControl;
@@ -172,49 +169,6 @@ public class MIRunControlTest extends BaseTestCase {
}
}
}
-
- /**
- * Utility method to return the process DM context. These tests launch a
- * single process, thus only one such context is available.
- *
- *
- * This must not be called from the DSF executor.
- *
- * @return the process context
- * @throws InterruptedException
- */
- @ThreadSafeAndProhibitedFromDsfExecutor("fSession.getExecutor()")
- private IProcessDMContext getProcessContext() throws InterruptedException {
- assert !fRunCtrl.getExecutor().isInExecutorThread();
-
- final AsyncCompletionWaitor waitor = new AsyncCompletionWaitor();
-
- fRunCtrl.getExecutor().submit(new Runnable() {
- public void run() {
- fProcService.getProcessesBeingDebugged(fGDBCtrl.getContext(), new DataRequestMonitor(fRunCtrl.getExecutor(), null) {
- @Override
- protected void handleCompleted() {
- if (isSuccess()) {
- IDMContext[] contexts = getData();
- Assert.assertNotNull("invalid return value from service", contexts);
- Assert.assertEquals("unexpected number of processes", contexts.length, 1);
- IDMContext context = contexts[0];
- IProcessDMContext processContext = DMContexts.getAncestorOfType(context, IProcessDMContext.class);
- Assert.assertNotNull("unexpected process context type ", processContext);
- waitor.setReturnInfo(processContext);
- }
- }
-
- });
- }
- });
-
-
-
- waitor.waitUntilDone(TestsPlugin.massageTimeout(2000));
- Assert.assertTrue(waitor.getMessage(), waitor.isOK());
- return (IProcessDMContext) waitor.getReturnInfo();
- }
/*
* For Multi-threaded application - In case of one thread, Thread id should start with 1.
@@ -236,7 +190,7 @@ public class MIRunControlTest extends BaseTestCase {
}
};
- final IProcessDMContext processContext = getProcessContext();
+ final IProcessDMContext processContext = SyncUtil.getProcessContext();
/*
* Test getExecutionContexts() when only one thread exist.
@@ -324,7 +278,7 @@ public class MIRunControlTest extends BaseTestCase {
Assert.assertEquals("Thread created event is for wrong thread id", sProgramIsCygwin ? 3 : 2, ((IMIExecutionDMContext)startedEvent.getDMContext()).getThreadId());
- final IProcessDMContext processContext = getProcessContext();
+ final IProcessDMContext processContext = SyncUtil.getProcessContext();
/*
* Test getExecutionContexts for a valid container DMC
@@ -382,7 +336,7 @@ public class MIRunControlTest extends BaseTestCase {
}
};
- final IProcessDMContext processContext = getProcessContext();
+ final IProcessDMContext processContext = SyncUtil.getProcessContext();
/*
* Call getModelData for Execution DMC
@@ -616,7 +570,7 @@ public class MIRunControlTest extends BaseTestCase {
getGDBLaunch().getSession(),
IResumedDMEvent.class);
- final IProcessDMContext processContext = getProcessContext();
+ final IProcessDMContext processContext = SyncUtil.getProcessContext();
fRunCtrl.getExecutor().submit(new Runnable() {
public void run() {
@@ -687,7 +641,7 @@ public class MIRunControlTest extends BaseTestCase {
wait.waitReset();
- final IProcessDMContext processContext = getProcessContext();
+ final IProcessDMContext processContext = SyncUtil.getProcessContext();
fRunCtrl.getExecutor().submit(new Runnable() {
public void run() {
@@ -733,7 +687,7 @@ public class MIRunControlTest extends BaseTestCase {
return;
}
- final IProcessDMContext processContext = getProcessContext();
+ final IProcessDMContext processContext = SyncUtil.getProcessContext();
fRunCtrl.getExecutor().submit(new Runnable() {
public void run() {