From 3127c6b89883269a59ac307fcd1cfc37828128e2 Mon Sep 17 00:00:00 2001 From: Matthew Khouzam Date: Sat, 22 Oct 2016 08:10:16 -0400 Subject: [PATCH] tmf.core: Make getParamater synchronized 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 Reviewed-on: https://git.eclipse.org/r/83739 Reviewed-by: Hudson CI Reviewed-by: Genevieve Bastien --- .../core/criticalpath/CriticalPathModule.java | 2 +- .../tests/stubs/analysis/TestAnalysis.java | 23 ++++++++++--------- .../analysis/TmfAbstractAnalysisModule.java | 2 +- 3 files changed, 14 insertions(+), 13 deletions(-) diff --git a/analysis/org.eclipse.tracecompass.analysis.graph.core/src/org/eclipse/tracecompass/analysis/graph/core/criticalpath/CriticalPathModule.java b/analysis/org.eclipse.tracecompass.analysis.graph.core/src/org/eclipse/tracecompass/analysis/graph/core/criticalpath/CriticalPathModule.java index 481d37cdb8..b0cf581630 100644 --- a/analysis/org.eclipse.tracecompass.analysis.graph.core/src/org/eclipse/tracecompass/analysis/graph/core/criticalpath/CriticalPathModule.java +++ b/analysis/org.eclipse.tracecompass.analysis.graph.core/src/org/eclipse/tracecompass/analysis/graph/core/criticalpath/CriticalPathModule.java @@ -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(); } diff --git a/tmf/org.eclipse.tracecompass.tmf.core.tests/stubs/org/eclipse/tracecompass/tmf/tests/stubs/analysis/TestAnalysis.java b/tmf/org.eclipse.tracecompass.tmf.core.tests/stubs/org/eclipse/tracecompass/tmf/tests/stubs/analysis/TestAnalysis.java index b453646c30..e4e400f802 100644 --- a/tmf/org.eclipse.tracecompass.tmf.core.tests/stubs/org/eclipse/tracecompass/tmf/tests/stubs/analysis/TestAnalysis.java +++ b/tmf/org.eclipse.tracecompass.tmf.core.tests/stubs/org/eclipse/tracecompass/tmf/tests/stubs/analysis/TestAnalysis.java @@ -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); diff --git a/tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/analysis/TmfAbstractAnalysisModule.java b/tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/analysis/TmfAbstractAnalysisModule.java index a1c65f2371..638edc9857 100644 --- a/tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/analysis/TmfAbstractAnalysisModule.java +++ b/tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/analysis/TmfAbstractAnalysisModule.java @@ -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)) { -- 2.34.1