Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--dsf/org.eclipse.cdt.examples.dsf/src/org/eclipse/cdt/examples/dsf/timers/TimersVMProvider.java43
1 files changed, 43 insertions, 0 deletions
diff --git a/dsf/org.eclipse.cdt.examples.dsf/src/org/eclipse/cdt/examples/dsf/timers/TimersVMProvider.java b/dsf/org.eclipse.cdt.examples.dsf/src/org/eclipse/cdt/examples/dsf/timers/TimersVMProvider.java
index e44c122d7db..6a535983b75 100644
--- a/dsf/org.eclipse.cdt.examples.dsf/src/org/eclipse/cdt/examples/dsf/timers/TimersVMProvider.java
+++ b/dsf/org.eclipse.cdt.examples.dsf/src/org/eclipse/cdt/examples/dsf/timers/TimersVMProvider.java
@@ -42,12 +42,55 @@ public class TimersVMProvider extends AbstractDMVMProvider {
/** Enumeration of possible layouts for the timers view model */
public enum ViewLayout { TRIGGERS_AT_TOP, TIMERS_AT_TOP }
+ /** Have we registered ourselves as a listener for DM events? */
+ private boolean fRegisteredEventListener;
+
public TimersVMProvider(AbstractVMAdapter adapter, IPresentationContext presentationContext, DsfSession session) {
super(adapter, presentationContext, session);
+
+ // Add ourselves as listener for DM events events.
+ try {
+ session.getExecutor().execute(new Runnable() {
+ public void run() {
+ if (DsfSession.isSessionActive(getSession().getId())) {
+ getSession().addServiceEventListener(TimersVMProvider.this, null);
+ fRegisteredEventListener = true;
+ }
+ }
+ });
+ } catch (RejectedExecutionException e) {
+ // Session shut down, not much we can do but wait to be disposed.
+ }
+
// Set the initial view layout.
setViewLayout(ViewLayout.TIMERS_AT_TOP);
}
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.dsf.ui.viewmodel.AbstractVMProvider#dispose()
+ */
+ @Override
+ public void dispose() {
+ // Remove ourselves as listener for DM events events. In practice, we
+ // get called after the session has shut down, so we'll end up with a
+ // RejectedExecutionException. We put this here all the same for
+ // completeness sake.
+ try {
+ getSession().getExecutor().execute(new Runnable() {
+ public void run() {
+ if (fRegisteredEventListener && DsfSession.isSessionActive(getSession().getId())) {
+ getSession().removeServiceEventListener(TimersVMProvider.this);
+ fRegisteredEventListener = false;
+ }
+ }
+ });
+ } catch (RejectedExecutionException e) {
+ // Session shut down, not much we can do but wait to be disposed.
+ }
+
+ super.dispose();
+ }
+
/**
* Configures a new layout for the timers view model.
* @param layout New layout to use.

Back to the top