analysis: Fix concurrent data access violations
authorPatrick Tasse <patrick.tasse@gmail.com>
Mon, 16 Jan 2017 22:39:29 +0000 (17:39 -0500)
committerPatrick Tasse <patrick.tasse@gmail.com>
Wed, 18 Jan 2017 18:06:00 +0000 (13:06 -0500)
Fixes CID 160189, 160190

Change-Id: I7046182081d2f754821c4938874f81d6efef870e
Signed-off-by: Patrick Tasse <patrick.tasse@gmail.com>
Reviewed-on: https://git.eclipse.org/r/88800
Reviewed-by: Hudson CI
Reviewed-by: Genevieve Bastien <gbastien+lttng@versatic.net>
Tested-by: Genevieve Bastien <gbastien+lttng@versatic.net>
analysis/org.eclipse.tracecompass.analysis.os.linux.ui/src/org/eclipse/tracecompass/internal/analysis/os/linux/ui/views/cpuusage/CpuUsageComposite.java
analysis/org.eclipse.tracecompass.analysis.os.linux.ui/src/org/eclipse/tracecompass/internal/analysis/os/linux/ui/views/cpuusage/CpuUsageView.java
analysis/org.eclipse.tracecompass.analysis.os.linux.ui/src/org/eclipse/tracecompass/internal/analysis/os/linux/ui/views/kernelmemoryusage/KernelMemoryUsageTreeViewer.java
analysis/org.eclipse.tracecompass.analysis.os.linux.ui/src/org/eclipse/tracecompass/internal/analysis/os/linux/ui/views/kernelmemoryusage/KernelMemoryUsageView.java

index 429d26364f29837a067f108a7d212b3339a005f8..a72d899ca3e08d6064e243f022ca35e421727494 100644 (file)
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2014, 2015 École Polytechnique de Montréal
+ * Copyright (c) 2014, 2017 École Polytechnique de Montréal
  *
  * All rights reserved. This program and the accompanying materials are
  * made available under the terms of the Eclipse Public License v1.0 which
@@ -183,6 +183,11 @@ public class CpuUsageComposite extends AbstractTmfTreeViewer {
         };
     }
 
+    @Override
+    protected ITmfTrace getTrace() {
+        return super.getTrace();
+    }
+
     // ------------------------------------------------------------------------
     // Operations
     // ------------------------------------------------------------------------
index ac5cf75a435be550716e5cca43691fceaf67a5dd..0c9d1ccf837162713578bfa6e708b97bc9769d32 100644 (file)
@@ -131,8 +131,8 @@ public class CpuUsageView extends TmfChartView {
     /**
      * Save a data in the data map of {@link TmfTraceContext}
      */
-    private static void saveData(@NonNull String key, @NonNull Object data) {
-        ITmfTrace trace = TmfTraceManager.getInstance().getActiveTrace();
+    private void saveData(@NonNull String key, @NonNull Object data) {
+        ITmfTrace trace = getViewerTrace();
         if (trace == null) {
             return;
         }
@@ -140,11 +140,20 @@ public class CpuUsageView extends TmfChartView {
                 builder -> builder.setData(key, data));
     }
 
-    private static Object getData(@NonNull String key) {
-        TmfTraceContext ctx = TmfTraceManager.getInstance().getCurrentTraceContext();
+    private Object getData(@NonNull String key) {
+        ITmfTrace trace = getViewerTrace();
+        if (trace == null) {
+            return null;
+        }
+        TmfTraceContext ctx = TmfTraceManager.getInstance().getTraceContext(trace);
         return ctx.getData(key);
     }
 
+    private ITmfTrace getViewerTrace() {
+        CpuUsageComposite treeViewer = fTreeViewer;
+        return (treeViewer != null) ? treeViewer.getTrace() : null;
+    }
+
     @Override
     public void setFocus() {
         if (fXYViewer != null) {
index 958fa64eebe16927c27dbaa5d546c2ab28750ff9..9e4afa26e767b3e890ddde511f3b201fc9ae0ae2 100644 (file)
@@ -1,5 +1,5 @@
 /**********************************************************************
- * Copyright (c) 2016 Polytechnique de Montréal
+ * Copyright (c) 2016, 2017 Polytechnique de Montréal
  *
  * All rights reserved. This program and the accompanying materials are
  * made available under the terms of the Eclipse Public License v1.0 which
@@ -122,6 +122,11 @@ public class KernelMemoryUsageTreeViewer extends AbstractTmfTreeViewer {
         };
     }
 
+    @Override
+    protected ITmfTrace getTrace() {
+        return super.getTrace();
+    }
+
     // ------------------------------------------------------------------------
     // Operations
     // ------------------------------------------------------------------------
index 525206839ebcd10fbcc512c6ed2580cb92a96909..f3061e2281e28f597f6e50d369eb7e6f29dc1986 100644 (file)
@@ -8,8 +8,6 @@
  **********************************************************************/
 package org.eclipse.tracecompass.internal.analysis.os.linux.ui.views.kernelmemoryusage;
 
-import static org.eclipse.tracecompass.common.core.NonNullUtils.checkNotNull;
-
 import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.ISelectionChangedListener;
@@ -62,19 +60,28 @@ public class KernelMemoryUsageView extends TmfChartView {
     private final class SelectionChangeListener implements ISelectionChangedListener {
         @Override
         public void selectionChanged(SelectionChangedEvent event) {
+            KernelMemoryUsageTreeViewer treeViewer = fTreeViewerReference;
+            KernelMemoryUsageViewer chartViewer = (KernelMemoryUsageViewer) getChartViewer();
+            if (treeViewer == null || chartViewer == null) {
+                return;
+            }
+            ITmfTrace trace = treeViewer.getTrace();
+            if (trace == null) {
+                return;
+            }
             ISelection selection = event.getSelection();
             if (selection instanceof IStructuredSelection) {
                 Object structSelection = ((IStructuredSelection) selection).getFirstElement();
                 if (structSelection instanceof KernelMemoryUsageEntry) {
                     KernelMemoryUsageEntry entry = (KernelMemoryUsageEntry) structSelection;
-                    fTreeViewerReference.setSelectedThread(entry.getTid());
-                    ((KernelMemoryUsageViewer) getChartViewer()).setSelectedThread(entry.getTid());
-                    ITmfTrace trace = TmfTraceManager.getInstance().getActiveTrace();
-                    if (trace == null) {
+                    String tid = entry.getTid();
+                    if (tid == null) {
                         return;
                     }
+                    treeViewer.setSelectedThread(tid);
+                    chartViewer.setSelectedThread(tid);
                     TmfTraceManager.getInstance().updateTraceContext(trace,
-                            builder -> builder.setData(KERNEL_MEMORY, checkNotNull(entry.getTid())));
+                            builder -> builder.setData(KERNEL_MEMORY, tid));
                 }
             }
         }
This page took 0.029111 seconds and 5 git commands to generate.