tmf.core: Make getParamater synchronized
authorMatthew Khouzam <matthew.khouzam@ericsson.com>
Sat, 22 Oct 2016 12:10:16 +0000 (08:10 -0400)
committerMatthew Khouzam <matthew.khouzam@ericsson.com>
Tue, 1 Nov 2016 14:15:57 +0000 (10:15 -0400)
The setter (setParameter) is synchronized, since getParameter is not
atomic, it needs to to also be synchronized to avoid racy situations.

Change-Id: I1c7eb0a2fde364efd7e879a82411f91fae0deab2
Signed-off-by: Matthew Khouzam <matthew.khouzam@ericsson.com>
Reviewed-on: https://git.eclipse.org/r/83739
Reviewed-by: Hudson CI
Reviewed-by: Genevieve Bastien <gbastien+lttng@versatic.net>
analysis/org.eclipse.tracecompass.analysis.graph.core/src/org/eclipse/tracecompass/analysis/graph/core/criticalpath/CriticalPathModule.java
tmf/org.eclipse.tracecompass.tmf.core.tests/stubs/org/eclipse/tracecompass/tmf/tests/stubs/analysis/TestAnalysis.java
tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/analysis/TmfAbstractAnalysisModule.java

index 481d37cdb8ca7b05a065faf4cc5508fe79947eab..b0cf581630ed1144b3349d30238eba7a9b1be2da 100644 (file)
@@ -110,7 +110,7 @@ public class CriticalPathModule extends TmfAbstractAnalysisModule {
     }
 
     @Override
-    public @Nullable Object getParameter(String name) {
+    public @Nullable synchronized Object getParameter(String name) {
         if (name.equals(PARAM_GRAPH)) {
             return getGraph();
         }
index b453646c30a533df18bb349e8a04146c59a82b5b..e4e400f8026a4422ce18b9a57ce0e37715ed098d 100644 (file)
@@ -43,25 +43,26 @@ public class TestAnalysis extends TmfAbstractAnalysisModule {
 
     @Override
     protected boolean executeAnalysis(final IProgressMonitor monitor) {
-        if (getParameter(PARAM_TEST) == null) {
+        Object parameter = getParameter(PARAM_TEST);
+        if (!(parameter instanceof Integer)) {
             throw new RuntimeException("The parameter should be set");
         }
+        int integer = ((Integer) parameter).intValue();
         /* If PARAM_TEST is set to 0, simulate cancellation */
-        if ((Integer) getParameter(PARAM_TEST) == 0) {
-            fOutput = 0;
+        fOutput = integer;
+        if (integer == 0) {
             return false;
-        } else if ((Integer) getParameter(PARAM_TEST) == 999) {
+        } else if (integer == 999) {
             /* just stay in an infinite loop until cancellation */
             while (!monitor.isCanceled()) {
-
+                try {
+                    Thread.sleep(0);
+                } catch (InterruptedException e) {
+                    break;
+                }
             }
             return !monitor.isCanceled();
         }
-        Object obj = getParameter(PARAM_TEST);
-        if (obj == null) {
-            throw new IllegalStateException();
-        }
-        fOutput = (Integer) obj;
         return true;
     }
 
@@ -71,7 +72,7 @@ public class TestAnalysis extends TmfAbstractAnalysisModule {
     }
 
     @Override
-    public Object getParameter(String name) {
+    public synchronized Object getParameter(String name) {
         Object value = super.getParameter(name);
         if ((value != null) && name.equals(PARAM_TEST) && (value instanceof String)) {
             return Integer.decode((String) value);
index a1c65f2371c5dc96c7b91f7b4e17448ca47200bc..638edc9857b892e01ce200a97b6e3dee22af4b05 100644 (file)
@@ -194,7 +194,7 @@ public abstract class TmfAbstractAnalysisModule extends TmfComponent
     }
 
     @Override
-    public @Nullable Object getParameter(String name) {
+    public @Nullable synchronized Object getParameter(String name) {
         Object paramValue = fParameters.get(name);
         /* The parameter is not set, maybe it can be provided by someone else */
         if ((paramValue == null) && (fTrace != null)) {
This page took 0.026187 seconds and 5 git commands to generate.