summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarc Dumais2013-09-04 14:06:19 (EDT)
committerMarc Khouzam2013-09-05 15:48:21 (EDT)
commitcf3f7a88971d00f5876c393d76630c2f64bc730b (patch)
tree64ad0dc484dbf68701d84f7c55e652c54fbd0c0b
parent7e3098b0264e2eb2bf35a5dc26e73628e094e8a2 (diff)
downloadorg.eclipse.cdt-cf3f7a88971d00f5876c393d76630c2f64bc730b.zip
org.eclipse.cdt-cf3f7a88971d00f5876c393d76630c2f64bc730b.tar.gz
org.eclipse.cdt-cf3f7a88971d00f5876c393d76630c2f64bc730b.tar.bz2
Bug 416524 - [Visualizer] NPE first session in C++ perspective refs/changes/56/16156/2
Change-Id: I586bccc85b043d7e1cadf5298aaf3c22bb79e950 Signed-off-by: Marc Dumais <marc.dumais@ericsson.com> Reviewed-on: https://git.eclipse.org/r/16156 Reviewed-by: Alvaro Sanchez-Leon <alvsan09@gmail.com> Reviewed-by: Marc Khouzam <marc.khouzam@ericsson.com> IP-Clean: Marc Khouzam <marc.khouzam@ericsson.com> Tested-by: Marc Khouzam <marc.khouzam@ericsson.com>
-rw-r--r--dsf-gdb/org.eclipse.cdt.dsf.gdb.multicorevisualizer.ui/src/org/eclipse/cdt/dsf/gdb/multicorevisualizer/internal/ui/view/MulticoreVisualizerEventListener.java52
1 files changed, 37 insertions, 15 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 2ebf872..338a3cd 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
@@ -13,6 +13,7 @@
* Marc Dumais (Ericsson) - Bug 396269
* Marc Dumais (Ericsson) - Bug 409512
* Marc Dumais (Ericsson) - Bug 409965
+ * Marc Dumais (Ericsson) - Bug 416524
*******************************************************************************/
package org.eclipse.cdt.dsf.gdb.multicorevisualizer.internal.ui.view;
@@ -78,6 +79,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();
// all-stop mode? If so, we take the opportunity, now that GDB has suspended
@@ -115,11 +122,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;
@@ -153,11 +160,17 @@ 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();
// in all-stop mode... : update all threads states to "running"
if (context != null && isSessionAllStop(context.getSessionId()) ) {
- List<VisualizerThread> tList = fVisualizer.getModel().getThreads();
+ List<VisualizerThread> tList = model.getThreads();
for(VisualizerThread t : tList) {
t.setState(VisualizerExecutionState.RUNNING);
}
@@ -172,7 +185,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 ||
@@ -187,6 +200,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 == null) return;
final String sessionId = context.getSessionId();
@@ -201,11 +220,8 @@ public class MulticoreVisualizerEventListener {
final IMIProcessDMContext processContext =
DMContexts.getAncestorOfType(execDmc, IMIProcessDMContext.class);
- VisualizerModel model = fVisualizer.getModel();
- if (model == null) return;
-
// put it on core zero
- VisualizerCore vCore = fVisualizer.getModel().getCore(0);
+ VisualizerCore vCore = model.getCore(0);
if (vCore == null) return;
int pid = Integer.parseInt(processContext.getProcId());
@@ -216,8 +232,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();
}
return;
@@ -252,7 +268,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
@@ -277,8 +293,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();
}
}
@@ -292,6 +308,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();
@@ -319,7 +341,7 @@ public class MulticoreVisualizerEventListener {
for (IDMContext c : contexts) {
if (c instanceof IMIExecutionDMContext) {
int tid = ((IMIExecutionDMContext)c).getThreadId();
- fVisualizer.getModel().markThreadExited(tid);
+ model.markThreadExited(tid);
}
}
@@ -339,7 +361,7 @@ public class MulticoreVisualizerEventListener {
// Thread exited
int tid = ((IMIExecutionDMContext)context).getThreadId();
- fVisualizer.getModel().markThreadExited(tid);
+ model.markThreadExited(tid);
if (canvas != null) {
canvas.requestUpdate();