diff options
-rw-r--r-- | dsf-gdb/org.eclipse.cdt.dsf.gdb.multicorevisualizer.ui/src/org/eclipse/cdt/dsf/gdb/multicorevisualizer/internal/ui/view/MulticoreVisualizerEventListener.java | 42 |
1 files changed, 34 insertions, 8 deletions
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb.multicorevisualizer.ui/src/org/eclipse/cdt/dsf/gdb/multicorevisualizer/internal/ui/view/MulticoreVisualizerEventListener.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb.multicorevisualizer.ui/src/org/eclipse/cdt/dsf/gdb/multicorevisualizer/internal/ui/view/MulticoreVisualizerEventListener.java index 146d19558a7..2438c6de843 100644 --- a/dsf-gdb/org.eclipse.cdt.dsf.gdb.multicorevisualizer.ui/src/org/eclipse/cdt/dsf/gdb/multicorevisualizer/internal/ui/view/MulticoreVisualizerEventListener.java +++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb.multicorevisualizer.ui/src/org/eclipse/cdt/dsf/gdb/multicorevisualizer/internal/ui/view/MulticoreVisualizerEventListener.java @@ -12,6 +12,7 @@ * Marc Dumais (Ericsson) - Bug 405390 * Marc Dumais (Ericsson) - Bug 396269 * Marc Dumais (Ericsson) - Bug 409512 + * Marc Dumais (Ericsson) - Bug 416524 *******************************************************************************/ package org.eclipse.cdt.dsf.gdb.multicorevisualizer.internal.ui.view; @@ -32,6 +33,7 @@ import org.eclipse.cdt.dsf.debug.service.IRunControl.StateChangeReason; import org.eclipse.cdt.dsf.gdb.multicorevisualizer.internal.ui.MulticoreVisualizerUIPlugin; import org.eclipse.cdt.dsf.gdb.multicorevisualizer.internal.ui.model.VisualizerCore; import org.eclipse.cdt.dsf.gdb.multicorevisualizer.internal.ui.model.VisualizerExecutionState; +import org.eclipse.cdt.dsf.gdb.multicorevisualizer.internal.ui.model.VisualizerModel; import org.eclipse.cdt.dsf.gdb.multicorevisualizer.internal.ui.model.VisualizerThread; import org.eclipse.cdt.dsf.gdb.multicorevisualizer.internal.utils.DSFDebugModel; import org.eclipse.cdt.dsf.gdb.service.IGDBProcesses.IGdbThreadDMData; @@ -72,6 +74,12 @@ public class MulticoreVisualizerEventListener { */ @DsfServiceEventHandler public void handleEvent(final ISuspendedDMEvent event) { + // make sure model exists + final VisualizerModel model = fVisualizer.getModel(); + if (model == null) { + return; + } + IDMContext context = event.getDMContext(); if (context instanceof IContainerDMContext) { // We don't deal with processes @@ -100,11 +108,11 @@ public class MulticoreVisualizerEventListener { if (cores != null) { assert cores.length == 1; // A thread belongs to a single core int coreId = Integer.parseInt(cores[0]); - VisualizerCore vCore = fVisualizer.getModel().getCore(coreId); + VisualizerCore vCore = model.getCore(coreId); int tid = execDmc.getThreadId(); - VisualizerThread thread = fVisualizer.getModel().getThread(tid); + VisualizerThread thread = model.getThread(tid); if (thread != null) { assert thread.getState() == VisualizerExecutionState.RUNNING; @@ -138,6 +146,12 @@ public class MulticoreVisualizerEventListener { /** Invoked when a thread or process is resumed. */ @DsfServiceEventHandler public void handleEvent(IResumedDMEvent event) { + // make sure model exists + VisualizerModel model = fVisualizer.getModel(); + if (model == null) { + return; + } + IDMContext context = event.getDMContext(); if (context instanceof IContainerDMContext) { // We don't deal with processes @@ -145,7 +159,7 @@ public class MulticoreVisualizerEventListener { // Thread resumed int tid = ((IMIExecutionDMContext)context).getThreadId(); - VisualizerThread thread = fVisualizer.getModel().getThread(tid); + VisualizerThread thread = model.getThread(tid); if (thread != null) { assert thread.getState() == VisualizerExecutionState.SUSPENDED || @@ -160,6 +174,12 @@ public class MulticoreVisualizerEventListener { /** Invoked when a thread or process starts. */ @DsfServiceEventHandler public void handleEvent(IStartedDMEvent event) { + // make sure model exists + final VisualizerModel model = fVisualizer.getModel(); + if (model == null) { + return; + } + IDMContext context = event.getDMContext(); if (context instanceof IContainerDMContext) { // We don't deal with processes @@ -189,7 +209,7 @@ public class MulticoreVisualizerEventListener { if (cores != null) { assert cores.length == 1; // A thread belongs to a single core int coreId = Integer.parseInt(cores[0]); - VisualizerCore vCore = fVisualizer.getModel().getCore(coreId); + VisualizerCore vCore = model.getCore(coreId); // There is a race condition that sometimes happens here. We can reach // here because we were notified that a thread is started, but the model // is not yet completely constructed. If the model doesn't yet contain the @@ -214,8 +234,8 @@ public class MulticoreVisualizerEventListener { // add thread if not already there - there is a potential race condition where a // thread can be added twice to the model: once at model creation and once more // through the listener. Checking at both places to prevent this. - if (fVisualizer.getModel().getThread(tid) == null ) { - fVisualizer.getModel().addThread(new VisualizerThread(vCore, pid, osTid, tid, VisualizerExecutionState.RUNNING)); + if (model.getThread(tid) == null ) { + model.addThread(new VisualizerThread(vCore, pid, osTid, tid, VisualizerExecutionState.RUNNING)); fVisualizer.getMulticoreVisualizerCanvas().requestUpdate(); } } @@ -229,6 +249,12 @@ public class MulticoreVisualizerEventListener { /** Invoked when a thread or process exits. */ @DsfServiceEventHandler public void handleEvent(IExitedDMEvent event) { + // make sure model exists + final VisualizerModel model = fVisualizer.getModel(); + if (model == null) { + return; + } + IDMContext context = event.getDMContext(); final MulticoreVisualizerCanvas canvas = fVisualizer.getMulticoreVisualizerCanvas(); @@ -256,7 +282,7 @@ public class MulticoreVisualizerEventListener { for (IDMContext c : contexts) { if (c instanceof IMIExecutionDMContext) { int tid = ((IMIExecutionDMContext)c).getThreadId(); - fVisualizer.getModel().markThreadExited(tid); + model.markThreadExited(tid); } } @@ -271,7 +297,7 @@ public class MulticoreVisualizerEventListener { // Thread exited int tid = ((IMIExecutionDMContext)context).getThreadId(); - fVisualizer.getModel().markThreadExited(tid); + model.markThreadExited(tid); if (canvas != null) { canvas.requestUpdate(); |