Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPawel Piech2010-01-05 23:51:29 +0000
committerPawel Piech2010-01-05 23:51:29 +0000
commite31d06b0030d8177aa0b456bbe5f4898e872ee7e (patch)
tree5f075a85596621de9a885a6560920bbe63cd5140 /dsf/org.eclipse.cdt.examples.dsf.pda.ui
parent47e8b801a09e264c63bd574479f787f537ad308e (diff)
downloadorg.eclipse.cdt-e31d06b0030d8177aa0b456bbe5f4898e872ee7e.tar.gz
org.eclipse.cdt-e31d06b0030d8177aa0b456bbe5f4898e872ee7e.tar.xz
org.eclipse.cdt-e31d06b0030d8177aa0b456bbe5f4898e872ee7e.zip
[298909] - [launch] DSF suspend trigger susceptible to race conditions
Diffstat (limited to 'dsf/org.eclipse.cdt.examples.dsf.pda.ui')
-rw-r--r--dsf/org.eclipse.cdt.examples.dsf.pda.ui/plugin.xml2
-rw-r--r--dsf/org.eclipse.cdt.examples.dsf.pda.ui/src/org/eclipse/cdt/examples/dsf/pda/ui/PDASuspendTrigger.java56
-rw-r--r--dsf/org.eclipse.cdt.examples.dsf.pda.ui/src/org/eclipse/cdt/examples/dsf/pda/ui/SessionAdapterSet.java12
3 files changed, 59 insertions, 11 deletions
diff --git a/dsf/org.eclipse.cdt.examples.dsf.pda.ui/plugin.xml b/dsf/org.eclipse.cdt.examples.dsf.pda.ui/plugin.xml
index 0f83e6b5f9b..2a0a9b3d948 100644
--- a/dsf/org.eclipse.cdt.examples.dsf.pda.ui/plugin.xml
+++ b/dsf/org.eclipse.cdt.examples.dsf.pda.ui/plugin.xml
@@ -70,7 +70,7 @@
point="org.eclipse.debug.ui.contextViewBindings">
<contextViewBinding
contextId="org.eclipse.cdt.examples.dsf.pda.debugging"
- viewId="org.eclipse.cdt.examples.dsf.pda.dataStackView"/>
+ viewId="org.eclipse.debug.ui.ExpressionView"/>
</extension>
<extension
diff --git a/dsf/org.eclipse.cdt.examples.dsf.pda.ui/src/org/eclipse/cdt/examples/dsf/pda/ui/PDASuspendTrigger.java b/dsf/org.eclipse.cdt.examples.dsf.pda.ui/src/org/eclipse/cdt/examples/dsf/pda/ui/PDASuspendTrigger.java
new file mode 100644
index 00000000000..f97621c504c
--- /dev/null
+++ b/dsf/org.eclipse.cdt.examples.dsf.pda.ui/src/org/eclipse/cdt/examples/dsf/pda/ui/PDASuspendTrigger.java
@@ -0,0 +1,56 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Wind River Systems and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.cdt.examples.dsf.pda.ui;
+
+import java.util.concurrent.RejectedExecutionException;
+
+import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
+import org.eclipse.cdt.dsf.concurrent.DsfRunnable;
+import org.eclipse.cdt.dsf.concurrent.IDsfStatusConstants;
+import org.eclipse.cdt.dsf.debug.service.IRunControl.IContainerDMContext;
+import org.eclipse.cdt.dsf.debug.ui.contexts.DsfSuspendTrigger;
+import org.eclipse.cdt.dsf.service.DsfSession;
+import org.eclipse.cdt.examples.dsf.pda.service.PDACommandControl;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.debug.core.ILaunch;
+
+/**
+ * @since 2.1
+ */
+public class PDASuspendTrigger extends DsfSuspendTrigger {
+
+ public PDASuspendTrigger(DsfSession session, ILaunch launch) {
+ super(session, launch);
+ }
+
+ @Override
+ protected void getLaunchTopContainers(final DataRequestMonitor<IContainerDMContext[]> rm) {
+ try {
+ getSession().getExecutor().execute(new DsfRunnable() {
+ public void run() {
+ PDACommandControl control =
+ getServicesTracker().getService(PDACommandControl.class);
+ if (control != null) {
+ rm.setData(new IContainerDMContext[] { control.getContext() });
+ } else {
+ rm.setStatus(new Status(IStatus.ERROR, PDAUIPlugin.PLUGIN_ID, IDsfStatusConstants.INVALID_STATE, "Not available", null));
+ }
+ rm.done();
+
+ }
+ });
+ } catch (RejectedExecutionException e) {
+ rm.setStatus(new Status(IStatus.ERROR, PDAUIPlugin.PLUGIN_ID, IDsfStatusConstants.INVALID_STATE, "Not available", e));
+ rm.done();
+ }
+ }
+}
diff --git a/dsf/org.eclipse.cdt.examples.dsf.pda.ui/src/org/eclipse/cdt/examples/dsf/pda/ui/SessionAdapterSet.java b/dsf/org.eclipse.cdt.examples.dsf.pda.ui/src/org/eclipse/cdt/examples/dsf/pda/ui/SessionAdapterSet.java
index 6b5d01dd710..d7018fb07e6 100644
--- a/dsf/org.eclipse.cdt.examples.dsf.pda.ui/src/org/eclipse/cdt/examples/dsf/pda/ui/SessionAdapterSet.java
+++ b/dsf/org.eclipse.cdt.examples.dsf.pda.ui/src/org/eclipse/cdt/examples/dsf/pda/ui/SessionAdapterSet.java
@@ -10,24 +10,19 @@
*******************************************************************************/
package org.eclipse.cdt.examples.dsf.pda.ui;
-import org.eclipse.cdt.dsf.datamodel.IDMContext;
import org.eclipse.cdt.dsf.debug.ui.actions.DsfResumeCommand;
import org.eclipse.cdt.dsf.debug.ui.actions.DsfStepIntoCommand;
import org.eclipse.cdt.dsf.debug.ui.actions.DsfStepOverCommand;
import org.eclipse.cdt.dsf.debug.ui.actions.DsfStepReturnCommand;
import org.eclipse.cdt.dsf.debug.ui.actions.DsfSuspendCommand;
-import org.eclipse.cdt.dsf.debug.ui.contexts.DsfSuspendTrigger;
import org.eclipse.cdt.dsf.debug.ui.sourcelookup.DsfSourceDisplayAdapter;
import org.eclipse.cdt.dsf.debug.ui.viewmodel.SteppingController;
import org.eclipse.cdt.dsf.debug.ui.viewmodel.launch.DefaultDsfModelSelectionPolicyFactory;
-import org.eclipse.cdt.dsf.debug.ui.viewmodel.launch.DefaultDsfSelectionPolicy;
import org.eclipse.cdt.dsf.service.DsfSession;
-import org.eclipse.cdt.dsf.ui.viewmodel.datamodel.IDMVMContext;
import org.eclipse.cdt.examples.dsf.pda.PDAPlugin;
import org.eclipse.cdt.examples.dsf.pda.launch.PDALaunch;
import org.eclipse.cdt.examples.dsf.pda.ui.actions.PDATerminateCommand;
import org.eclipse.cdt.examples.dsf.pda.ui.viewmodel.PDAVMAdapter;
-import org.eclipse.debug.core.ILaunch;
import org.eclipse.debug.core.commands.IResumeHandler;
import org.eclipse.debug.core.commands.IStepIntoHandler;
import org.eclipse.debug.core.commands.IStepOverHandler;
@@ -36,10 +31,7 @@ import org.eclipse.debug.core.commands.ISuspendHandler;
import org.eclipse.debug.core.commands.ITerminateHandler;
import org.eclipse.debug.core.model.IDebugModelProvider;
import org.eclipse.debug.core.sourcelookup.ISourceLookupDirector;
-import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelSelectionPolicy;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelSelectionPolicyFactory;
-import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext;
-import org.eclipse.debug.ui.IDebugUIConstants;
import org.eclipse.debug.ui.sourcelookup.ISourceDisplay;
/**
@@ -59,7 +51,7 @@ class SessionAdapterSet {
final DsfSuspendCommand fSuspendCommand;
final DsfResumeCommand fResumeCommand;
final PDATerminateCommand fTerminateCommand;
- final DsfSuspendTrigger fSuspendTrigger;
+ final PDASuspendTrigger fSuspendTrigger;
// Adapters for integration with other UI actions
final IDebugModelProvider fDebugModelProvider;
@@ -96,7 +88,7 @@ class SessionAdapterSet {
fSuspendCommand = new DsfSuspendCommand(session);
fResumeCommand = new DsfResumeCommand(session);
fTerminateCommand = new PDATerminateCommand(session);
- fSuspendTrigger = new DsfSuspendTrigger(session, fLaunch);
+ fSuspendTrigger = new PDASuspendTrigger(session, fLaunch);
session.registerModelAdapter(IStepIntoHandler.class, fStepIntoCommand);
session.registerModelAdapter(IStepOverHandler.class, fStepOverCommand);

Back to the top