Fix for bug 382529: ConcurrentModificationException in Control Flow
authorPatrick Tasse <patrick.tasse@gmail.com>
Wed, 13 Jun 2012 17:54:40 +0000 (13:54 -0400)
committerPatrick Tasse <patrick.tasse@gmail.com>
Wed, 13 Jun 2012 17:54:40 +0000 (13:54 -0400)
view.

org.eclipse.linuxtools.lttng2.kernel.ui/src/org/eclipse/linuxtools/internal/lttng2/kernel/ui/views/controlflow/ControlFlowView.java
org.eclipse.linuxtools.lttng2.kernel.ui/src/org/eclipse/linuxtools/internal/lttng2/kernel/ui/views/resources/ResourcesView.java

index bf905ac1669c56435bf4371f8ee5a2ff7f570dfc..e68580b1b344da958d7909ffa95fdc8fdcc02272 100644 (file)
@@ -110,6 +110,9 @@ public class ControlFlowView extends TmfView {
     // The timegraph entry list\r
     private ArrayList<ControlFlowEntry> fEntryList;\r
 \r
+    // The time graph entry list synchronization object\r
+    final private Object fEntryListSyncObj = new Object();\r
+\r
     // The start time\r
     private long fStartTime;\r
 \r
@@ -258,7 +261,10 @@ public class ControlFlowView extends TmfView {
 \r
         @Override\r
         public void run() {\r
-            ArrayList<ControlFlowEntry> entryList = fEntryList;\r
+            ArrayList<ControlFlowEntry> entryList = null;\r
+            synchronized (fEntryListSyncObj) {\r
+                entryList = fEntryList;\r
+            }\r
             if (entryList == null) {\r
                 return;\r
             }\r
@@ -574,7 +580,9 @@ public class ControlFlowView extends TmfView {
                 buildTree(entryList, rootList);\r
             }\r
             Collections.sort(rootList, fControlFlowEntryComparator);\r
-            fEntryList = rootList;\r
+            synchronized (fEntryListSyncObj) {\r
+                fEntryList = (ArrayList<ControlFlowEntry>) rootList.clone();\r
+            }\r
             refresh(INITIAL_WINDOW_OFFSET);\r
         }\r
         for (ControlFlowEntry entry : rootList) {\r
@@ -661,7 +669,10 @@ public class ControlFlowView extends TmfView {
                 if (fTimeGraphCombo.isDisposed()) {\r
                     return;\r
                 }\r
-                ITimeGraphEntry[] entries = fEntryList.toArray(new ITimeGraphEntry[0]);\r
+                ITimeGraphEntry[] entries = null;\r
+                synchronized (fEntryListSyncObj) {\r
+                    entries = fEntryList.toArray(new ITimeGraphEntry[0]);\r
+                }\r
                 Arrays.sort(entries, fControlFlowEntryComparator);\r
                 fTimeGraphCombo.setInput(entries);\r
                 fTimeGraphCombo.getTimeGraphViewer().setTimeBounds(fStartTime, fEndTime);\r
index f0e1e74daecbfed4bab1ded41acaeaee37ca34f3..6c596ad7ad572f1a5129909be5f661f92f5ddc81 100644 (file)
@@ -87,6 +87,9 @@ public class ResourcesView extends TmfView {
     // The time graph entry list\r
     private ArrayList<TraceEntry> fEntryList;\r
 \r
+    // The time graph entry list synchronization object\r
+    final private Object fEntryListSyncObj = new Object();\r
+\r
     // The start time\r
     private long fStartTime;\r
 \r
@@ -220,7 +223,10 @@ public class ResourcesView extends TmfView {
 \r
         @Override\r
         public void run() {\r
-            ArrayList<TraceEntry> entryList = fEntryList;\r
+            ArrayList<TraceEntry> entryList = null;\r
+            synchronized (fEntryListSyncObj) {\r
+                entryList = fEntryList;\r
+            }\r
             if (entryList == null) {\r
                 return;\r
             }\r
@@ -443,9 +449,11 @@ public class ResourcesView extends TmfView {
                 }\r
             }\r
         }\r
-        fEntryList = entryList;\r
+        synchronized (fEntryListSyncObj) {\r
+            fEntryList = (ArrayList<TraceEntry>) entryList.clone();\r
+        }\r
         refresh(INITIAL_WINDOW_OFFSET);\r
-        for (TraceEntry traceEntry : fEntryList) {\r
+        for (TraceEntry traceEntry : entryList) {\r
             CtfKernelTrace ctfKernelTrace = ((TraceEntry) traceEntry).getTrace();\r
             IStateSystemQuerier ssq = ctfKernelTrace.getStateSystem();\r
             long startTime = ssq.getStartTime();\r
@@ -562,7 +570,10 @@ public class ResourcesView extends TmfView {
                 if (fTimeGraphViewer.getControl().isDisposed()) {\r
                     return;\r
                 }\r
-                ITimeGraphEntry[] entries = fEntryList.toArray(new ITimeGraphEntry[0]);\r
+                ITimeGraphEntry[] entries = null;\r
+                synchronized (fEntryListSyncObj) {\r
+                    entries = fEntryList.toArray(new ITimeGraphEntry[0]);\r
+                }\r
                 Arrays.sort(entries, new TraceEntryComparator());\r
                 fTimeGraphViewer.setInput(entries);\r
                 fTimeGraphViewer.setTimeBounds(fStartTime, fEndTime);\r
This page took 0.037473 seconds and 5 git commands to generate.