diff options
author | Pawel Piech | 2010-01-05 23:51:29 +0000 |
---|---|---|
committer | Pawel Piech | 2010-01-05 23:51:29 +0000 |
commit | e31d06b0030d8177aa0b456bbe5f4898e872ee7e (patch) | |
tree | 5f075a85596621de9a885a6560920bbe63cd5140 /dsf/org.eclipse.cdt.examples.dsf.pda.ui | |
parent | 47e8b801a09e264c63bd574479f787f537ad308e (diff) | |
download | org.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')
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); |