tmf: Fix TmfSignalManager leaking listeners
authorPatrick Tasse <patrick.tasse@gmail.com>
Wed, 30 Nov 2016 22:57:23 +0000 (17:57 -0500)
committerPatrick Tasse <patrick.tasse@gmail.com>
Thu, 8 Dec 2016 14:12:05 +0000 (09:12 -0500)
Change-Id: I28c23d2cf88a4280d2b81fd463a4c5fac6af5143
Signed-off-by: Patrick Tasse <patrick.tasse@gmail.com>
Reviewed-on: https://git.eclipse.org/r/86107
Reviewed-by: Hudson CI
Reviewed-by: Matthew Khouzam <matthew.khouzam@ericsson.com>
Tested-by: Matthew Khouzam <matthew.khouzam@ericsson.com>
47 files changed:
analysis/org.eclipse.tracecompass.analysis.graph.core.tests/src/org/eclipse/tracecompass/analysis/graph/core/tests/graph/TmfGraphBuilderModuleTest.java
analysis/org.eclipse.tracecompass.analysis.os.linux.core.tests/src/org/eclipse/tracecompass/analysis/os/linux/core/tests/latency/SyscallAnalysisTest.java
analysis/org.eclipse.tracecompass.analysis.os.linux.core.tests/src/org/eclipse/tracecompass/analysis/os/linux/core/tests/latency/SyscallStatsAnalysisTest.java
analysis/org.eclipse.tracecompass.analysis.os.linux.ui.swtbot.tests/src/org/eclipse/tracecompass/analysis/os/linux/ui/swtbot/tests/latency/SystemCallLatencyTableAnalysisTest.java
analysis/org.eclipse.tracecompass.analysis.os.linux.ui.tests/src/org/eclipse/tracecompass/analysis/os/linux/ui/tests/view/controlflow/ControlFlowEntryComparatorTest.java
analysis/org.eclipse.tracecompass.analysis.os.linux.ui.tests/src/org/eclipse/tracecompass/analysis/os/linux/ui/tests/view/controlflow/ControlFlowOptimizerTest.java
analysis/org.eclipse.tracecompass.analysis.timing.core.tests/src/org/eclipse/tracecompass/analysis/timing/core/tests/callgraph/CallGraphAnalysisTest.java
analysis/org.eclipse.tracecompass.analysis.timing.core.tests/src/org/eclipse/tracecompass/analysis/timing/core/tests/flamegraph/AggregatedCalledFunctionStatisticsTest.java
analysis/org.eclipse.tracecompass.analysis.timing.core.tests/src/org/eclipse/tracecompass/analysis/timing/core/tests/flamegraph/AggregationTreeTest.java
analysis/org.eclipse.tracecompass.analysis.timing.core.tests/src/org/eclipse/tracecompass/analysis/timing/core/tests/segmentstore/statistics/AbstractStatsAnalysisTest.java
analysis/org.eclipse.tracecompass.analysis.timing.core.tests/src/org/eclipse/tracecompass/analysis/timing/core/tests/segmentstore/statistics/StubSegmentStatisticsAnalysis.java
analysis/org.eclipse.tracecompass.analysis.timing.ui/src/org/eclipse/tracecompass/analysis/timing/ui/views/segmentstore/statistics/AbstractSegmentStoreStatisticsViewer.java
lttng/org.eclipse.tracecompass.lttng2.control.ui/src/org/eclipse/tracecompass/internal/lttng2/control/ui/relayd/LttngRelaydConnectionManager.java
lttng/org.eclipse.tracecompass.lttng2.kernel.core.tests/src/org/eclipse/tracecompass/lttng2/kernel/core/tests/analysis/graph/LttngExecutionGraphTest.java
lttng/org.eclipse.tracecompass.lttng2.kernel.ui.swtbot.tests/src/org/eclipse/tracecompass/lttng2/kernel/ui/swtbot/tests/OpenTraceStressTest.java
lttng/org.eclipse.tracecompass.lttng2.kernel.ui/src/org/eclipse/tracecompass/internal/lttng2/kernel/ui/criticalpath/CriticalPathParameterProvider.java
tmf/org.eclipse.tracecompass.tmf.analysis.xml.core.tests/src/org/eclipse/tracecompass/tmf/analysis/xml/core/tests/stateprovider/TmfXmlDoubleTest.java
tmf/org.eclipse.tracecompass.tmf.analysis.xml.core.tests/src/org/eclipse/tracecompass/tmf/analysis/xml/core/tests/stateprovider/XmlModuleTestBase.java
tmf/org.eclipse.tracecompass.tmf.analysis.xml.core.tests/src/org/eclipse/tracecompass/tmf/analysis/xml/core/tests/stateprovider/XmlProviderTestBase.java
tmf/org.eclipse.tracecompass.tmf.core.tests/src/org/eclipse/tracecompass/tmf/core/tests/analysis/AnalysisListenerTest.java
tmf/org.eclipse.tracecompass.tmf.core.tests/src/org/eclipse/tracecompass/tmf/core/tests/analysis/requirements/AnalysisEventFieldRequirementTest.java
tmf/org.eclipse.tracecompass.tmf.core.tests/src/org/eclipse/tracecompass/tmf/core/tests/analysis/requirements/AnalysisEventRequirementTest.java
tmf/org.eclipse.tracecompass.tmf.core.tests/src/org/eclipse/tracecompass/tmf/core/tests/analysis/requirements/CompositeRequirementTest.java
tmf/org.eclipse.tracecompass.tmf.core.tests/src/org/eclipse/tracecompass/tmf/core/tests/parsers/custom/CustomXmlTraceTest.java
tmf/org.eclipse.tracecompass.tmf.core.tests/src/org/eclipse/tracecompass/tmf/core/tests/statesystem/mipmap/TmfMipmapStateProviderStub.java
tmf/org.eclipse.tracecompass.tmf.core.tests/src/org/eclipse/tracecompass/tmf/core/tests/synchronization/SyncTest.java
tmf/org.eclipse.tracecompass.tmf.core.tests/src/org/eclipse/tracecompass/tmf/core/tests/trace/TmfTraceTest.java
tmf/org.eclipse.tracecompass.tmf.core.tests/src/org/eclipse/tracecompass/tmf/core/tests/trace/stub/XmlStubTraceTest.java
tmf/org.eclipse.tracecompass.tmf.core.tests/src/org/eclipse/tracecompass/tmf/core/tests/trace/text/TextTraceTest.java
tmf/org.eclipse.tracecompass.tmf.core.tests/stubs/org/eclipse/tracecompass/tmf/tests/stubs/trace/xml/TmfXmlTraceStub.java
tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/internal/tmf/core/Activator.java
tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/internal/tmf/core/analysis/TmfAnalysisParameterProviders.java
tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/analysis/IAnalysisParameterProvider.java
tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/analysis/TmfAnalysisManager.java
tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/analysis/TmfAnalysisModuleHelperConfigElement.java
tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/analysis/TmfAnalysisModuleOutputs.java
tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/trace/TmfTrace.java
tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/trace/TmfTraceManager.java
tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/Activator.java
tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/project/dialogs/offset/OffsetDialog.java
tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/internal/tmf/ui/views/TmfAlignmentSynchronizer.java
tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/ITmfProjectModelElement.java
tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfCommonProjectElement.java
tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfProjectModelElement.java
tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/project/model/TmfProjectRegistry.java
tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/views/TmfChartView.java
tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/views/TmfView.java

index a9540d5d6c56297fa80eb571fb2cf266e546b0a4..382878ae74f22b9e427839c3088d7069716dcb54 100644 (file)
@@ -22,7 +22,6 @@ import org.eclipse.tracecompass.analysis.graph.core.tests.Activator;
 import org.eclipse.tracecompass.analysis.graph.core.tests.stubs.TestGraphWorker;
 import org.eclipse.tracecompass.analysis.graph.core.tests.stubs.module.GraphBuilderModuleStub;
 import org.eclipse.tracecompass.tmf.core.signal.TmfTraceOpenedSignal;
-import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
 import org.eclipse.tracecompass.tmf.core.trace.TmfTrace;
 import org.eclipse.tracecompass.tmf.core.trace.TmfTraceUtils;
 import org.eclipse.tracecompass.tmf.tests.stubs.trace.xml.TmfXmlTraceStub;
@@ -50,9 +49,8 @@ public class TmfGraphBuilderModuleTest {
      *
      * @return
      */
-    private TmfGraphBuilderModule getModule() {
-        ITmfTrace trace = TmfXmlTraceStub.setupTrace(Activator.getAbsoluteFilePath(STUB_TRACE_FILE));
-        ((TmfTrace) trace).traceOpened(new TmfTraceOpenedSignal(this, trace, null));
+    private TmfGraphBuilderModule getModule(TmfTrace trace) {
+        trace.traceOpened(new TmfTraceOpenedSignal(this, trace, null));
         GraphBuilderModuleStub module = null;
         for (GraphBuilderModuleStub mod : TmfTraceUtils.getAnalysisModulesOfClass(trace, GraphBuilderModuleStub.class)) {
             module = mod;
@@ -67,8 +65,9 @@ public class TmfGraphBuilderModuleTest {
      */
     @Test
     public void testBuildGraph() {
+        TmfXmlTraceStub trace = TmfXmlTraceStub.setupTrace(Activator.getAbsoluteFilePath(STUB_TRACE_FILE));
 
-        TmfGraphBuilderModule module = getModule();
+        TmfGraphBuilderModule module = getModule(trace);
         module.schedule();
         module.waitForCompletion();
 
@@ -115,6 +114,7 @@ public class TmfGraphBuilderModuleTest {
             assertEquals(hasEdges2[i][3], v.getEdge(EdgeDirection.OUTGOING_VERTICAL_EDGE) != null);
         }
 
+        trace.dispose();
     }
 
 }
index 8f55c3714e91b75b385ec248b5f4556572cad38d..11d50540f67f38ce925a504fc87661471b4877ef 100644 (file)
@@ -20,7 +20,6 @@ import org.eclipse.tracecompass.testtraces.ctf.CtfTestTrace;
 import org.eclipse.tracecompass.tmf.core.analysis.IAnalysisModule;
 import org.eclipse.tracecompass.tmf.core.signal.TmfTraceOpenedSignal;
 import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
-import org.eclipse.tracecompass.tmf.core.trace.TmfTrace;
 import org.eclipse.tracecompass.tmf.core.trace.TmfTraceUtils;
 import org.junit.After;
 import org.junit.Before;
@@ -33,6 +32,7 @@ import org.junit.Test;
  */
 public class SyscallAnalysisTest {
 
+    private ITmfTrace fTestTrace;
     private SystemCallLatencyAnalysis fSyscallModule;
 
     /**
@@ -40,9 +40,10 @@ public class SyscallAnalysisTest {
      */
     @Before
     public void setUp() {
-        ITmfTrace trace = KernelCtfTraceStub.getTrace(CtfTestTrace.ARM_64_BIT_HEADER);
+        KernelCtfTraceStub trace = KernelCtfTraceStub.getTrace(CtfTestTrace.ARM_64_BIT_HEADER);
+        fTestTrace = trace;
         /* Make sure the Kernel analysis has run */
-        ((TmfTrace) trace).traceOpened(new TmfTraceOpenedSignal(this, trace, null));
+        trace.traceOpened(new TmfTraceOpenedSignal(this, trace, null));
         for (IAnalysisModule mod : TmfTraceUtils.getAnalysisModulesOfClass(trace, SystemCallLatencyAnalysis.class)) {
             fSyscallModule = (SystemCallLatencyAnalysis) mod;
         }
@@ -56,9 +57,9 @@ public class SyscallAnalysisTest {
      */
     @After
     public void cleanup() {
-        final SystemCallLatencyAnalysis syscallModule = fSyscallModule;
-        if( syscallModule != null) {
-            syscallModule.dispose();
+        final ITmfTrace testTrace = fTestTrace;
+        if (testTrace != null) {
+            testTrace.dispose();
         }
     }
 
index 235af47150fcfa5b424ba304a9c3e7f51dfa342d..a35bc44df5e19c432150f0e08df7ca48ed88cab4 100644 (file)
@@ -19,7 +19,6 @@ import org.eclipse.tracecompass.testtraces.ctf.CtfTestTrace;
 import org.eclipse.tracecompass.tmf.core.analysis.IAnalysisModule;
 import org.eclipse.tracecompass.tmf.core.signal.TmfTraceOpenedSignal;
 import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
-import org.eclipse.tracecompass.tmf.core.trace.TmfTrace;
 import org.eclipse.tracecompass.tmf.core.trace.TmfTraceUtils;
 import org.junit.After;
 import org.junit.Before;
@@ -32,7 +31,7 @@ import org.junit.Test;
  */
 public class SyscallStatsAnalysisTest {
 
-    private TmfTrace fTestTrace;
+    private ITmfTrace fTestTrace;
     private SystemCallLatencyStatisticsAnalysisModule fSyscallStatsModule;
 
     /**
@@ -40,9 +39,10 @@ public class SyscallStatsAnalysisTest {
      */
     @Before
     public void setupAnalysis() {
-        ITmfTrace trace = KernelCtfTraceStub.getTrace(CtfTestTrace.ARM_64_BIT_HEADER);
+        KernelCtfTraceStub trace = KernelCtfTraceStub.getTrace(CtfTestTrace.ARM_64_BIT_HEADER);
+        fTestTrace = trace;
         /* Make sure the Kernel analysis has run */
-        ((TmfTrace) trace).traceOpened(new TmfTraceOpenedSignal(this, trace, null));
+        trace.traceOpened(new TmfTraceOpenedSignal(this, trace, null));
         IAnalysisModule module = null;
         for (IAnalysisModule mod : TmfTraceUtils.getAnalysisModulesOfClass(trace, SystemCallLatencyAnalysis.class)) {
             module = mod;
@@ -65,7 +65,7 @@ public class SyscallStatsAnalysisTest {
      */
     @After
     public void cleanup() {
-        final TmfTrace testTrace = fTestTrace;
+        final ITmfTrace testTrace = fTestTrace;
         if (testTrace != null) {
             testTrace.dispose();
         }
index 28e04514655f12c80288adb866ae40bccb48ee3d..53922ed9af3815ea3d5f3d0b191823b478813335 100644 (file)
@@ -41,7 +41,7 @@ import org.eclipse.tracecompass.tmf.ui.swtbot.tests.shared.SWTBotUtils;
 import org.eclipse.tracecompass.tmf.ui.tests.shared.WaitUtils;
 import org.eclipse.ui.IViewPart;
 import org.eclipse.ui.IViewReference;
-import org.junit.BeforeClass;
+import org.junit.AfterClass;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
@@ -67,11 +67,11 @@ public class SystemCallLatencyTableAnalysisTest extends SegmentTableTest {
     }
 
     /**
-     * Things to setup
+     * Clean up
      */
-    @BeforeClass
-    public static void beforeClass() {
-        SegmentTableTest.beforeClass();
+    @AfterClass
+    public static void afterClass() {
+        fSystemCallLatencyAnalysis.dispose();
     }
 
     @Override
index 7028e4f01653e5eb78bfb784c44a9c33ac747b04..7afbd13adbe3f31361c69e70642ce8cd7ec00a1e 100644 (file)
@@ -28,6 +28,7 @@ import org.eclipse.tracecompass.tmf.ctf.core.tests.shared.CtfTmfTestTraceUtils;
 import org.eclipse.tracecompass.tmf.ui.views.timegraph.ITimeGraphEntryComparator;
 import org.eclipse.tracecompass.tmf.ui.widgets.timegraph.model.ITimeGraphEntry;
 import org.eclipse.tracecompass.tmf.ui.widgets.timegraph.model.TimeGraphEntry;
+import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
 
@@ -41,7 +42,7 @@ public class ControlFlowEntryComparatorTest {
 
     private static final @NonNull CtfTestTrace TEST_TRACE1 = CtfTestTrace.SYNC_DEST;
     private static final @NonNull CtfTestTrace TEST_TRACE2 = CtfTestTrace.SYNC_SRC;
-    private static final @NonNull CtfTestTrace TEST_TRACE3 = CtfTestTrace.DEBUG_INFO;
+    private static final @NonNull CtfTestTrace TEST_TRACE3 = CtfTestTrace.DEBUG_INFO4;
 
     private static ITmfTrace TRACE1;
     private static ITmfTrace TRACE2;
@@ -76,6 +77,16 @@ public class ControlFlowEntryComparatorTest {
         TRACE3 = CtfTmfTestTraceUtils.getTrace(TEST_TRACE3);
     }
 
+    /**
+     * Clean up
+     */
+    @AfterClass
+    public static void afterClass() {
+        TRACE1.dispose();
+        TRACE2.dispose();
+        TRACE3.dispose();
+    }
+
     /**
      * Test {@link IControlFlowEntryComparator#PROCESS_NAME_COMPARATOR}
      */
index d6a9df71691a113e602c6ecdbefbb7f5eb580756..91e267f6a399642bd2efe0fd1498f507cd9df75a 100644 (file)
@@ -30,6 +30,7 @@ import org.eclipse.tracecompass.tmf.ctf.core.trace.CtfTmfTrace;
 import org.eclipse.tracecompass.tmf.ui.widgets.timegraph.model.ILinkEvent;
 import org.eclipse.tracecompass.tmf.ui.widgets.timegraph.model.TimeGraphEntry;
 import org.eclipse.tracecompass.tmf.ui.widgets.timegraph.model.TimeLinkEvent;
+import org.junit.AfterClass;
 import org.junit.Test;
 
 import com.google.common.collect.ImmutableMap;
@@ -61,6 +62,14 @@ public class ControlFlowOptimizerTest {
         return new NaiveOptimizationAlgorithm();
     }
 
+    /**
+     * Clean up
+     */
+    @AfterClass
+    public static void afterClass() {
+        TRACE.dispose();
+    }
+
     /**
      * Test an empty vector.
      */
index c4919088f795a5a814fd14d86c4f320e38600ed7..27fa9b1efd8358f1f54349abfbe33e11e5213363 100644 (file)
@@ -132,6 +132,7 @@ public class CallGraphAnalysisTest {
         assertEquals("Depth:First parent", 0, f1.getDepth());
         assertEquals("Depth:Second parent", 1, f2.getDepth());
         assertEquals("Depth:Last child", 2, f3.getDepth());
+        cga.dispose();
     }
 
     /**
@@ -193,6 +194,7 @@ public class CallGraphAnalysisTest {
         assertEquals("Function's self time", 10, f1.getSelfTime());
         assertEquals("Compare the function's self time and total time", f1.getLength(), f1.getSelfTime());
         assertEquals("Function's depth", 0, f1.getDepth());
+        cga.dispose();
     }
 
     /**
@@ -247,7 +249,7 @@ public class CallGraphAnalysisTest {
 
         assertEquals("Test of parenthood", NonNullUtils.checkNotNull(firstChild.getParent()).getSymbol(), threads.get(0).getSymbol());
         assertEquals("Test of parenthood", NonNullUtils.checkNotNull(secondChild.getParent()).getSymbol(), threads.get(1).getSymbol());
-
+        cga.dispose();
     }
 
     /**
@@ -287,6 +289,7 @@ public class CallGraphAnalysisTest {
         for (int i = 1; i < LARGE_AMOUNT_OF_SEGMENTS; i++) {
             assertEquals("Test parenthood", ((ICalledFunction) segments[i - 1]).getSymbol(), NonNullUtils.checkNotNull(((ICalledFunction) segments[i]).getParent()).getSymbol());
         }
+        cga.dispose();
     }
 
     /**
@@ -302,6 +305,7 @@ public class CallGraphAnalysisTest {
         assertNotNull(segmentStore);
         Object[] segments = segmentStore.toArray();
         assertEquals("Number of root functions", 0, segments.length);
+        cga.dispose();
     }
 
     /**
@@ -394,6 +398,6 @@ public class CallGraphAnalysisTest {
 
         // Test if the first child and the third one have the same address
         assertEquals("Test the address of two functions", firstChild.getSymbol(), thirdChild.getSymbol());
-
+        cga.dispose();
     }
 }
index 67ed76fa4cb0505337b3f9db4c7123b649923246..2afb80be21c346ea1a6c367efdadc08171013cea 100644 (file)
@@ -150,6 +150,7 @@ public class AggregatedCalledFunctionStatisticsTest {
         assertEquals("Test second function's average self time", 30, functionStatistics2.getAverageSelfTime(), ERROR);
         assertEquals("Test second function's standard deviation", Double.NaN, functionStatistics2.getStdDev(), ERROR);
         assertEquals("Test second function's self time standard deviation", Double.NaN, functionStatistics2.getStdDevSelfTime(), ERROR);
+        cga.dispose();
     }
 
     /**
@@ -248,7 +249,7 @@ public class AggregatedCalledFunctionStatisticsTest {
         assertEquals("Test second leaf's average self time", 20, leafStatistics2.getAverageSelfTime(), ERROR);
         assertEquals("Test second leaf's standard deviation", Double.NaN, leafStatistics2.getStdDev(), ERROR);
         assertEquals("Test second leaf's self time standard deviation", Double.NaN, leafStatistics2.getStdDevSelfTime(), ERROR);
-
+        cga.dispose();
     }
 
     /**
@@ -330,6 +331,7 @@ public class AggregatedCalledFunctionStatisticsTest {
         assertEquals("Test third function's average self time", 10, functionStatistics3.getAverageSelfTime(), ERROR);
         assertEquals("Test third function's standard deviation", Double.NaN, functionStatistics3.getStdDev(), ERROR);
         assertEquals("Test third function's self time standard deviation", Double.NaN, functionStatistics3.getStdDevSelfTime(), ERROR);
+        cga.dispose();
     }
 
     /**
@@ -470,6 +472,7 @@ public class AggregatedCalledFunctionStatisticsTest {
         assertEquals("Test fourth function's average duration", 15, fourthFunctionStatistics4.getAverageSelfTime(), ERROR);
         assertEquals("Test fourth function's standard deviation", Double.NaN, fourthFunctionStatistics4.getStdDev(), ERROR);
         assertEquals("Test fourth function's self time deviation", Double.NaN, fourthFunctionStatistics4.getStdDevSelfTime(), ERROR);
+        cga.dispose();
     }
 
 }
index bea1d1ca7bd5a633b3cf16b7e91928712d51d492..ea9e661b08711e806c68923602abe5fdc17f7f7c 100644 (file)
@@ -121,6 +121,7 @@ public class AggregationTreeTest {
         List<ThreadNode> threads = cga.getThreadNodes();
         assertNotNull(threads);
         assertEquals("Number of threads found", 0, threads.size());
+        cga.dispose();
     }
 
     /**
@@ -192,6 +193,7 @@ public class AggregationTreeTest {
         assertEquals("Test first function's nombre of calls", 1, firstFunction.getNbCalls());
         assertEquals("Test second function's nombre of calls", 1, secondFunction.getNbCalls());
         assertEquals("Test third function's nombre of calls", 1, thirdFunction.getNbCalls());
+        cga.dispose();
     }
 
     /**
@@ -267,6 +269,7 @@ public class AggregationTreeTest {
         assertEquals("Test first function's number of calls", 1, firstFunction.getNbCalls());
         assertEquals("Test second function's number of calls", 2, secondFunction.getNbCalls());
         assertEquals("Test third function's number of calls", 1, thirdFunction.getNbCalls());
+        cga.dispose();
     }
 
     /**
@@ -356,6 +359,7 @@ public class AggregationTreeTest {
         assertEquals("Test second function's number of calls", 2, secondFunction.getNbCalls());
         assertEquals("Test first leaf's number of calls", 1, leaf1.getNbCalls());
         assertEquals("Test second leaf's number of calls", 1, leaf2.getNbCalls());
+        cga.dispose();
     }
 
     /**
@@ -477,6 +481,7 @@ public class AggregationTreeTest {
         assertEquals("Test first child's number of calls", 2, function2.getNbCalls());
         assertEquals("Test second child's number of calls", 1, function3.getNbCalls());
         assertEquals("Test leaf's number of calls", 2, function4.getNbCalls());
+        cga.dispose();
     }
 
     /**
@@ -519,6 +524,7 @@ public class AggregationTreeTest {
             assertEquals("Test parenthood", NonNullUtils.checkNotNull(child.getParent()).getSymbol(), NonNullUtils.checkNotNull(parent.getSymbol()));
             parent = child;
         }
+        cga.dispose();
     }
 
     /**
@@ -593,7 +599,7 @@ public class AggregationTreeTest {
         assertEquals("Test first function's number of calls", 2, firstFunction.getNbCalls());
         assertEquals("Test second function's number of calls", 1, function2.getNbCalls());
         assertEquals("Test third function's number of calls", 1, function3.getNbCalls());
-
+        cga.dispose();
     }
 
     /**
@@ -677,7 +683,7 @@ public class AggregationTreeTest {
         assertEquals("Test first function's number of calls", 1, secondFunction.getNbCalls());
         assertEquals("Test third function's number of calls", 1, function3.getNbCalls());
         assertEquals("Test third function's number of calls", 1, function4.getNbCalls());
-
+        cga.dispose();
     }
 
     /**
index 235890284dd0fad68ad626d5c9e78d5dd3edf7d5..bc7f6a7a4539fb92c7bf3b2fe0df9d5210d56f0f 100644 (file)
@@ -22,6 +22,7 @@ import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.tracecompass.analysis.timing.core.segmentstore.statistics.AbstractSegmentStatisticsAnalysis;
 import org.eclipse.tracecompass.analysis.timing.core.segmentstore.statistics.SegmentStoreStatistics;
 import org.eclipse.tracecompass.tmf.core.exceptions.TmfAnalysisException;
+import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
 import org.eclipse.tracecompass.tmf.tests.stubs.trace.xml.TmfXmlTraceStub;
 import org.junit.Test;
 
@@ -44,6 +45,7 @@ public class AbstractStatsAnalysisTest {
     public void testExecuteNoTrace() throws TmfAnalysisException {
         StubSegmentStatisticsAnalysis fixture = new StubSegmentStatisticsAnalysis();
         assertFalse(fixture.executeAnalysis(new NullProgressMonitor()));
+        fixture.dispose();
     }
 
     /**
@@ -55,8 +57,11 @@ public class AbstractStatsAnalysisTest {
     @Test
     public void testExecuteNoDepend() throws TmfAnalysisException {
         StubSegmentStatisticsAnalysis fixture = new StubSegmentStatisticsAnalysis();
-        fixture.setTrace(new TmfXmlTraceStub());
+        TmfXmlTraceStub trace = new TmfXmlTraceStub();
+        fixture.setTrace(trace);
         assertFalse(fixture.executeAnalysis(new NullProgressMonitor()));
+        trace.dispose();
+        fixture.dispose();
     }
 
     /**
@@ -72,6 +77,8 @@ public class AbstractStatsAnalysisTest {
         fixture.setTrace(trace);
         fixture.getDependentAnalyses();
         assertTrue(fixture.executeAnalysis(new NullProgressMonitor()));
+        trace.dispose();
+        fixture.dispose();
     }
 
     /**
@@ -83,11 +90,14 @@ public class AbstractStatsAnalysisTest {
      */
     @Test
     public void testTotalStats() throws TmfAnalysisException {
-        StubSegmentStatisticsAnalysis fixture = getValidSegmentStats();
+        TmfXmlTraceStub trace = new TmfXmlTraceStub();
+        StubSegmentStatisticsAnalysis fixture = getValidSegmentStats(trace);
         SegmentStoreStatistics totalStats = fixture.getTotalStats();
         assertNotNull(totalStats);
         // no need to test the content much as it is tested in the other test.
         assertEquals(StubSegmentStatisticsAnalysis.SIZE, totalStats.getNbSegments());
+        trace.dispose();
+        fixture.dispose();
     }
 
     /**
@@ -99,7 +109,8 @@ public class AbstractStatsAnalysisTest {
      */
     @Test
     public void testPerTypeStats() throws TmfAnalysisException {
-        StubSegmentStatisticsAnalysis fixture = getValidSegmentStats();
+        TmfXmlTraceStub trace = new TmfXmlTraceStub();
+        StubSegmentStatisticsAnalysis fixture = getValidSegmentStats(trace);
         Map<@NonNull String, @NonNull SegmentStoreStatistics> perTypeStats = fixture.getPerSegmentTypeStats();
         assertNotNull(perTypeStats);
         // no need to test the content much as it is tested in the other test.
@@ -109,6 +120,8 @@ public class AbstractStatsAnalysisTest {
         assertNotNull(segmentStoreStatistics);
         // starts with 0  so size + 1
         assertEquals(StubSegmentStatisticsAnalysis.SIZE / 2 + 1, segmentStoreStatistics.getNbSegments());
+        trace.dispose();
+        fixture.dispose();
     }
 
     /**
@@ -120,7 +133,8 @@ public class AbstractStatsAnalysisTest {
      */
     @Test
     public void testPartialStats() throws TmfAnalysisException {
-        StubSegmentStatisticsAnalysis fixture = getValidSegmentStats();
+        TmfXmlTraceStub trace = new TmfXmlTraceStub();
+        StubSegmentStatisticsAnalysis fixture = getValidSegmentStats(trace);
         SegmentStoreStatistics totalStats = fixture.getTotalStatsForRange(100, 1100, new NullProgressMonitor());
         assertNotNull(totalStats);
         // no need to test the content much as it is tested in the other test.
@@ -128,6 +142,8 @@ public class AbstractStatsAnalysisTest {
         // 1051 = 1001 where start is between start and end + 50 overlapping
         // start
         assertEquals(1051, totalStats.getNbSegments());
+        trace.dispose();
+        fixture.dispose();
     }
 
     /**
@@ -139,7 +155,8 @@ public class AbstractStatsAnalysisTest {
      */
     @Test
     public void testPartialPerTypeStats() throws TmfAnalysisException {
-        StubSegmentStatisticsAnalysis fixture = getValidSegmentStats();
+        TmfXmlTraceStub trace = new TmfXmlTraceStub();
+        StubSegmentStatisticsAnalysis fixture = getValidSegmentStats(trace);
         Map<@NonNull String, @NonNull SegmentStoreStatistics> perTypeStats = fixture.getPerSegmentTypeStatsForRange(100, 1100, new NullProgressMonitor());
         assertNotNull(perTypeStats);
         // no need to test the content much as it is tested in the other test.
@@ -149,6 +166,8 @@ public class AbstractStatsAnalysisTest {
         assertNotNull(segmentStoreStatistics);
         // 526 = 1051/2+1 = see explanation of 1051 in #testPartialStats
         assertEquals(526, segmentStoreStatistics.getNbSegments());
+        trace.dispose();
+        fixture.dispose();
     }
 
     /**
@@ -159,16 +178,18 @@ public class AbstractStatsAnalysisTest {
      */
     @Test
     public void testPartialPerTypeStatsCancel() throws TmfAnalysisException {
-        StubSegmentStatisticsAnalysis fixture = getValidSegmentStats();
+        TmfXmlTraceStub trace = new TmfXmlTraceStub();
+        StubSegmentStatisticsAnalysis fixture = getValidSegmentStats(trace);
         NullProgressMonitor monitor = new NullProgressMonitor();
         monitor.setCanceled(true);
         Map<@NonNull String, @NonNull SegmentStoreStatistics> perTypeStats = fixture.getPerSegmentTypeStatsForRange(100, 1100, monitor);
         assertEquals(Collections.emptyMap(), perTypeStats);
+        trace.dispose();
+        fixture.dispose();
     }
 
-    private static StubSegmentStatisticsAnalysis getValidSegmentStats() throws TmfAnalysisException {
+    private static StubSegmentStatisticsAnalysis getValidSegmentStats(@NonNull ITmfTrace trace) throws TmfAnalysisException {
         StubSegmentStatisticsAnalysis fixture = new StubSegmentStatisticsAnalysis();
-        TmfXmlTraceStub trace = new TmfXmlTraceStub();
         fixture.setTrace(trace);
         fixture.getDependentAnalyses();
         fixture.executeAnalysis(new NullProgressMonitor());
index c65e7e203212cf000a0fce79df1d11985873ad22..807ec72ac8d02c241a53dd4bb92cc179809cf971 100644 (file)
@@ -72,7 +72,7 @@ class StubSegmentStatisticsAnalysis extends AbstractSegmentStatisticsAnalysis {
 
     private final List<@NonNull ISegment> fPreFixture;
     private final ISegmentStore<@NonNull ISegment> fFixture = SegmentStoreFactory.createSegmentStore();
-    private StubProvider fSegmentStoreProvider;
+    private @NonNull StubProvider fSegmentStoreProvider;
 
     public StubSegmentStatisticsAnalysis() {
         ImmutableList.Builder<@NonNull ISegment> builder = new Builder<>();
@@ -85,6 +85,12 @@ class StubSegmentStatisticsAnalysis extends AbstractSegmentStatisticsAnalysis {
         fSegmentStoreProvider = new StubProvider(fFixture);
     }
 
+    @Override
+    public void dispose() {
+        super.dispose();
+        fSegmentStoreProvider.dispose();
+    }
+
     @Override
     public boolean setTrace(@NonNull ITmfTrace trace) throws TmfAnalysisException {
         if (trace instanceof TmfXmlTraceStub) {
index 4bf0f3a4608c89fb429a2e16678418112d99aa1c..b6b288620d28354de95df734289be513cf4327ee 100644 (file)
@@ -35,6 +35,7 @@ import org.eclipse.jface.viewers.ViewerComparator;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.Tree;
 import org.eclipse.tracecompass.analysis.timing.core.segmentstore.statistics.AbstractSegmentStatisticsAnalysis;
 import org.eclipse.tracecompass.analysis.timing.core.segmentstore.statistics.SegmentStoreStatistics;
 import org.eclipse.tracecompass.analysis.timing.ui.views.segmentstore.SubSecondTimeWithUnitFormat;
@@ -99,7 +100,13 @@ public abstract class AbstractSegmentStoreStatisticsViewer extends AbstractTmfTr
             }
         });
         Menu tablePopup = fTablePopupMenuManager.createContextMenu(getTreeViewer().getTree());
-        getTreeViewer().getTree().setMenu(tablePopup);
+        Tree tree = getTreeViewer().getTree();
+        tree.setMenu(tablePopup);
+        tree.addDisposeListener(e -> {
+            if (fModule != null) {
+                fModule.dispose();
+            }
+        });
     }
 
     /** Provides label for the Segment Store tree viewer cells */
@@ -301,6 +308,9 @@ public abstract class AbstractSegmentStoreStatisticsViewer extends AbstractTmfTr
             try {
                 module.setTrace(trace);
                 module.schedule();
+                if (fModule != null) {
+                    fModule.dispose();
+                }
                 fModule = module;
             } catch (TmfAnalysisException e) {
                 Activator.getDefault().logError("Error initializing statistics analysis module", e); //$NON-NLS-1$
index 178e865cdc65481dc1efd678cbae41aa756115e7..eebab83aea959fb571f19d0e034187302a5b8216 100644 (file)
@@ -141,6 +141,7 @@ public final class LttngRelaydConnectionManager {
      * Dispose of all the manager's resources (i.e. its connections).
      */
     public void dispose() {
+        TmfSignalManager.deregister(fConnectionManager);
         for (LttngRelaydConsumer consumer : fConnections.values()) {
             consumer.dispose();
         }
index d7615e754228a23d0dcc791d2c145879f358d9fa..49d13d40529502dc66e7d1df8d1b069fb2973322 100644 (file)
@@ -36,7 +36,6 @@ import org.eclipse.tracecompass.tmf.core.event.TmfEvent;
 import org.eclipse.tracecompass.tmf.core.exceptions.TmfTraceException;
 import org.eclipse.tracecompass.tmf.core.signal.TmfTraceOpenedSignal;
 import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
-import org.eclipse.tracecompass.tmf.core.trace.TmfTrace;
 import org.eclipse.tracecompass.tmf.core.trace.TmfTraceUtils;
 import org.junit.Test;
 
@@ -57,7 +56,7 @@ public class LttngExecutionGraphTest {
      * @return The trace with its graph module executed
      */
     public ITmfTrace setUpTrace(String traceFile) {
-        ITmfTrace trace = new TmfXmlKernelTraceStub();
+        TmfXmlKernelTraceStub trace = new TmfXmlKernelTraceStub();
         IPath filePath = Activator.getAbsoluteFilePath(traceFile);
         IStatus status = trace.validate(null, filePath.toOSString());
         if (!status.isOK()) {
@@ -68,7 +67,7 @@ public class LttngExecutionGraphTest {
         } catch (TmfTraceException e) {
             fail(e.getMessage());
         }
-        ((TmfTrace) trace).traceOpened(new TmfTraceOpenedSignal(this, trace, null));
+        trace.traceOpened(new TmfTraceOpenedSignal(this, trace, null));
         IAnalysisModule module = null;
         for (IAnalysisModule mod : TmfTraceUtils.getAnalysisModulesOfClass(trace, TmfGraphBuilderModule.class)) {
             module = mod;
@@ -200,5 +199,6 @@ public class LttngExecutionGraphTest {
                 break;
             }
         }
+        trace.dispose();
     }
 }
index a2255219b9e86faf975e9db250a93c428f63ac30..6d7bc513b0408ed427576515e4e271f45ab5890f 100644 (file)
@@ -86,6 +86,7 @@ public class OpenTraceStressTest {
         SWTBotUtils.createProject(TRACE_PROJECT_NAME);
 
         File fTestFile = new File(CtfTmfTestTraceUtils.getTrace(CTF_TRACE).getPath());
+        CtfTmfTestTraceUtils.dispose(CTF_TRACE);
 
         String path = fTestFile.getAbsolutePath();
 
index 18a0c2485adb3b919b54407852f4e8340d59f6d9..ca03680f11805cf8f8cd84a178d45819b6292368 100644 (file)
@@ -40,6 +40,12 @@ public class CriticalPathParameterProvider extends TmfAbstractAnalysisParamProvi
         TmfSignalManager.register(this);
     }
 
+    @Override
+    public void dispose() {
+        super.dispose();
+        TmfSignalManager.deregister(this);
+    }
+
     @Override
     public String getName() {
         return NAME;
index 797a74d59a017990b81c54eb0f1f3bb48d06b61e..06faa1205e15c76b1bd401fd1e8225d7ad10c253 100644 (file)
@@ -61,5 +61,7 @@ public class TmfXmlDoubleTest {
         assertEquals(2.71828, val.get(0).getStateValue().unboxDouble(), Double.MIN_VALUE);
         val = ss.queryFullState(6);
         assertEquals(1.41421, val.get(0).getStateValue().unboxDouble(), Double.MIN_VALUE);
+        trace.dispose();
+        module.dispose();
     }
 }
index d3d4106c2cdfb095b5cdb334c393aa2b43a88491..d34ddea8790f49f25f91e2f35c56bc457c5418a4 100644 (file)
@@ -66,6 +66,8 @@ public abstract class XmlModuleTestBase {
         assertEquals(getAnalysisId(), fModule.getId());
 
         assertEquals(getAnalysisName(), fModule.getName());
+
+        fModule.dispose();
     }
 
     private void createModule(@NonNull Element element) {
@@ -171,6 +173,7 @@ public abstract class XmlModuleTestBase {
         } finally {
             trace.dispose();
         }
-
+        fModule.dispose();
+        CtfTmfTestTraceUtils.dispose(getTrace());
     }
 }
index 38dd04fc3604801c5f84df62b13fa3200ef1e4bc..4655bf356b8c314ba37bcfa035ee2a51d0d0e3b7 100644 (file)
@@ -88,6 +88,15 @@ public abstract class XmlProviderTestBase {
         }
     }
 
+    /**
+     * Clean up
+     */
+    @After
+    public void cleanup() {
+        fModule.dispose();
+        CtfTmfTestTraceUtils.dispose(getTrace());
+    }
+
     /**
      * The node name of the analysis in the file
      *
index ff4a554db9f6b3ea8d808da04046d0ac4570ade3..dbce70aac35ee451529a78d8c9f65ee0573daf9f 100644 (file)
@@ -44,6 +44,8 @@ public class AnalysisListenerTest {
          * by 1
          */
         assertEquals(countBefore + 1, NewModuleListenerStub.getModuleCount());
+
+        module.dispose();
     }
 
 }
index a6b3f4785aacffe56babe95ea2ef84fcf270ac68..52cb12fe0a08c209e3303d45b6909d2af1d91034 100644 (file)
@@ -9,23 +9,24 @@
 
 package org.eclipse.tracecompass.tmf.core.tests.analysis.requirements;
 
+import static org.eclipse.tracecompass.common.core.NonNullUtils.checkNotNull;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
-import static org.eclipse.tracecompass.common.core.NonNullUtils.checkNotNull;
 
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Set;
 
 import org.eclipse.jdt.annotation.NonNull;
-import org.eclipse.tracecompass.tmf.core.analysis.requirements.TmfAnalysisEventFieldRequirement;
 import org.eclipse.tracecompass.tmf.core.analysis.requirements.TmfAbstractAnalysisRequirement;
 import org.eclipse.tracecompass.tmf.core.analysis.requirements.TmfAbstractAnalysisRequirement.PriorityLevel;
+import org.eclipse.tracecompass.tmf.core.analysis.requirements.TmfAnalysisEventFieldRequirement;
 import org.eclipse.tracecompass.tmf.core.event.ITmfEventField;
 import org.eclipse.tracecompass.tmf.core.event.ITmfEventType;
 import org.eclipse.tracecompass.tmf.core.trace.ITmfTraceWithPreDefinedEvents;
 import org.eclipse.tracecompass.tmf.core.trace.TmfTrace;
 import org.eclipse.tracecompass.tmf.tests.stubs.trace.TmfTraceStub;
+import org.junit.After;
 import org.junit.Test;
 
 import com.google.common.collect.ImmutableSet;
@@ -109,6 +110,14 @@ public class AnalysisEventFieldRequirementTest {
 
     private final @NonNull TmfTrace trace = new TraceWithEvents();
 
+    /**
+     * Clean up
+     */
+    @After
+    public void cleanup() {
+        trace.dispose();
+    }
+
     /**
      * Test with optional requirements
      */
@@ -244,6 +253,8 @@ public class AnalysisEventFieldRequirementTest {
 
         req = new TmfAnalysisEventFieldRequirement(EVENT1, ImmutableSet.of(EVENT1_FIELD1), PriorityLevel.OPTIONAL);
         assertTrue(req.test(traceNoEvents));
+
+        traceNoEvents.dispose();
     }
 
 }
index 8c6e68bf4fa2b43db87f6872c5994027a6909cb9..2287ca63ef7d0505bba8ae5ced6e65698c9f1ccf 100644 (file)
@@ -16,14 +16,15 @@ import java.util.Collection;
 import java.util.Set;
 
 import org.eclipse.jdt.annotation.NonNull;
-import org.eclipse.tracecompass.tmf.core.analysis.requirements.TmfAnalysisEventRequirement;
 import org.eclipse.tracecompass.tmf.core.analysis.requirements.TmfAbstractAnalysisRequirement;
 import org.eclipse.tracecompass.tmf.core.analysis.requirements.TmfAbstractAnalysisRequirement.PriorityLevel;
+import org.eclipse.tracecompass.tmf.core.analysis.requirements.TmfAnalysisEventRequirement;
 import org.eclipse.tracecompass.tmf.core.event.ITmfEventField;
 import org.eclipse.tracecompass.tmf.core.event.ITmfEventType;
 import org.eclipse.tracecompass.tmf.core.trace.ITmfTraceWithPreDefinedEvents;
 import org.eclipse.tracecompass.tmf.core.trace.TmfTrace;
 import org.eclipse.tracecompass.tmf.tests.stubs.trace.TmfTraceStub;
+import org.junit.After;
 import org.junit.Test;
 
 import com.google.common.collect.ImmutableSet;
@@ -85,6 +86,14 @@ public class AnalysisEventRequirementTest {
 
     private final @NonNull TmfTrace fTrace = new TraceWithEvents();
 
+    /**
+     * Clean up
+     */
+    @After
+    public void cleanup() {
+        fTrace.dispose();
+    }
+
     /**
      * Test with optional requirements
      */
@@ -177,6 +186,7 @@ public class AnalysisEventRequirementTest {
         req = new TmfAnalysisEventRequirement(ImmutableSet.of(EVENT1, EVENT2), PriorityLevel.OPTIONAL);
         assertTrue(req.test(traceNoEvents));
 
+        traceNoEvents.dispose();
     }
 
 }
index a4771b45efbf0129fbb94eb75326c2c8f29c9043..77d11cbbbf836ba1ac321cff482f68e5e97f947f 100644 (file)
@@ -18,15 +18,15 @@ import java.util.Collections;
 import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.tracecompass.tmf.core.analysis.requirements.TmfAbstractAnalysisRequirement;
 import org.eclipse.tracecompass.tmf.core.analysis.requirements.TmfAbstractAnalysisRequirement.PriorityLevel;
+import org.eclipse.tracecompass.tmf.core.analysis.requirements.TmfCompositeAnalysisRequirement;
 import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
 import org.eclipse.tracecompass.tmf.tests.stubs.trace.TmfTraceStub;
+import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 
 import com.google.common.collect.ImmutableSet;
 
-import org.eclipse.tracecompass.tmf.core.analysis.requirements.TmfCompositeAnalysisRequirement;
-
 /**
  * Test the {@link TmfCompositeAnalysisRequirement} class
  *
@@ -72,6 +72,16 @@ public class CompositeRequirementTest {
         fTrace = new TmfTraceStub();
     }
 
+    /**
+     * Clean up
+     */
+    @After
+    public void cleanup() {
+        if (fTrace != null) {
+            fTrace.dispose();
+        }
+    }
+
     /**
      * Test composite requirement with {@link PriorityLevel#MANDATORY} level
      */
index 98046512447a9db6689eac3519bd3336a02308e3..5bf885f6acf06a032fd092273156989c4f2f6abc 100644 (file)
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2013, 2015 Ericsson
+ * Copyright (c) 2013, 2016 Ericsson
  *
  * All rights reserved. This program and the accompanying materials are
  * made available under the terms of the Eclipse Public License v1.0 which
@@ -16,6 +16,7 @@ import java.io.File;
 
 import org.eclipse.tracecompass.tmf.core.parsers.custom.CustomXmlTrace;
 import org.eclipse.tracecompass.tmf.core.parsers.custom.CustomXmlTraceDefinition;
+import org.junit.After;
 import org.junit.Before;
 
 /**
@@ -40,7 +41,7 @@ public abstract class CustomXmlTraceTest {
 
 
     /**
-     * set up directories
+     * set up definition
      */
     @Before
     public void init() {
@@ -48,6 +49,15 @@ public abstract class CustomXmlTraceTest {
         t = new CustomXmlTrace(cxtd);
     }
 
+    /**
+     * clean up
+     */
+    @After
+    public void cleanup() {
+        if (t != null) {
+            t.dispose();
+        }
+    }
 
     /**
      * @return the trace
index 02552cc58319d6776556aec167d8ed043783f628..b1b88e8a566a465945f3573e00ef09d3f38c4a37 100644 (file)
@@ -64,6 +64,12 @@ class TmfMipmapStateProviderStub extends AbstractTmfMipmapStateProvider {
         this.type = type;
     }
 
+    @Override
+    public void dispose() {
+        super.dispose();
+        getTrace().dispose();
+    }
+
     @Override
     protected void eventHandle(ITmfEvent ev) {
         ITmfStateSystemBuilder ss = checkNotNull(getStateSystemBuilder());
index 24dad3b0c3fc7c7fa6259a894e757eb63c4da3fb..42c7c5ad94072cb3d0a7371a572e356b25c6790f 100644 (file)
@@ -40,6 +40,7 @@ import org.eclipse.tracecompass.tmf.core.timestamp.TmfTimestamp;
 import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
 import org.eclipse.tracecompass.tmf.tests.stubs.event.TmfSyncEventStub;
 import org.eclipse.tracecompass.tmf.tests.stubs.trace.TmfTraceStub;
+import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -70,6 +71,19 @@ public class SyncTest {
         fTraces = traces;
     }
 
+    /**
+     * Clean up
+     */
+    @After
+    public void cleanup() {
+        if (t1 != null) {
+            t1.dispose();
+        }
+        if (t2 != null) {
+            t2.dispose();
+        }
+    }
+
     /**
      * Testing fully incremental algorithm with communication between the two
      * traces
index 9480f72f0178c2faf326235416064ae597861598..710d9db8ae32429be9716889751f532950f831e3 100644 (file)
@@ -226,6 +226,7 @@ public class TmfTraceTest {
             fail("TmfTrace.initialize() - no exception thrown");
         } catch (TmfTraceException e) {
             // Success
+            trace.dispose();
         } catch (Exception e) {
             fail("TmfTrace.initialize() - wrong exception thrown");
         }
index 14fb960654ca1a6dd3a49f3b81b3e088f592bb78..ad707bfcf89695adfcf67ae8bc3424c59de86933 100644 (file)
@@ -69,6 +69,8 @@ public class XmlStubTraceTest {
         for (File f : validFiles) {
             assertTrue(trace.validate(null, f.getAbsolutePath()).isOK());
         }
+
+        trace.dispose();
     }
 
     /**
@@ -90,6 +92,8 @@ public class XmlStubTraceTest {
             fail(e.getMessage());
         }
         assertEquals(4, req.getCount());
+
+        trace.dispose();
     }
 
     /**
@@ -134,6 +138,9 @@ public class XmlStubTraceTest {
         assertNotNull(event);
         assertEquals("Cpu aspect of event 4", 1, cpuAspect.resolve(event));
         assertEquals("Test aspect of event 4", "def", testAspect.resolve(event));
+
+        ctx.dispose();
+        trace.dispose();
     }
 
     private static IStatus testEvent(ITmfEvent event) {
index 38207c227af8de64e2da0ee80c44114480902c70..f59a73ef1ec6a92881c53bd71d4a6b056ce32640 100644 (file)
@@ -130,6 +130,8 @@ public class TextTraceTest {
 
         ITmfTimestamp initRange = TmfTimestamp.fromSeconds(60);
         assertEquals("getInitialRangeOffset", initRange, trace.getInitialRangeOffset());
+
+        trace.dispose();
     }
 
     @Test
@@ -154,6 +156,8 @@ public class TextTraceTest {
         String invalidTrace = fTestFile.getParentFile().getAbsolutePath();
         status = trace.validate(null, invalidTrace);
         assertFalse(status.isOK());
+
+        trace.dispose();
     }
 
     @Test
@@ -167,6 +171,7 @@ public class TextTraceTest {
         assertEquals("getPath",      fTestFile.toURI().getPath(), trace.getPath());
         assertEquals("getName",      NAME, trace.getName());
         assertEquals("getCacheSize", 100, trace.getCacheSize());
+        trace.dispose();
     }
 
     // ------------------------------------------------------------------------
index af595419c838e1d081581a434b89a8b072cea2d3..5525916a17d468e29ce66d362b0625ab8a3c73d7 100644 (file)
@@ -129,6 +129,7 @@ public class TmfXmlTraceStub extends TmfTrace {
         try {
             trace.initTrace(null, absolutePath.toOSString(), TmfEvent.class);
         } catch (TmfTraceException e) {
+            trace.dispose();
             fail(e.getMessage());
         }
         return trace;
@@ -139,7 +140,7 @@ public class TmfXmlTraceStub extends TmfTrace {
      * definition.
      */
     public TmfXmlTraceStub() {
-
+        boolean nonNullTraceIsNonNull = false;
         /* Load custom XML definition */
         try (InputStream in = TmfXmlTraceStub.class.getResourceAsStream(DEVELOPMENT_TRACE_PARSER_PATH);) {
             CustomXmlTraceDefinition[] definitions = CustomXmlTraceDefinition.loadAll(in);
@@ -154,9 +155,14 @@ public class TmfXmlTraceStub extends TmfTrace {
                     return new TmfCheckpointIndexer(this, interval);
                 }
             };
+            TmfSignalManager.deregister(fTrace);
+            nonNullTraceIsNonNull = true;
             /* The second definition parses 'event' trace events */
             fDefinition = checkNotNull(definitions[1]);
         } catch (IOException e) {
+            if (nonNullTraceIsNonNull) {
+                fTrace.dispose();
+            }
             throw new IllegalStateException("Cannot open the trace parser for development traces"); //$NON-NLS-1$
         }
 
index 55444baf2f8c921e9398fae9ef59dd1b9dfd8c64..9821b240cde515c5af2e4081ec9ef5d507428253 100644 (file)
@@ -91,6 +91,8 @@ public class Activator extends Plugin {
     @Override
     public void stop(BundleContext context) throws Exception {
         TmfCoreTracer.stop();
+        TmfTraceManager.getInstance().dispose();
+        TmfAnalysisManager.dispose();
         TmfSignalManager.dispose();
         setDefault(null);
         super.stop(context);
index 29cab03fc474f8012c199ffc0f8c9e6eeb50d178..89cf851bd315cfbd2239e895a16166e62bdf3c9d 100644 (file)
@@ -57,6 +57,15 @@ public final class TmfAnalysisParameterProviders {
 
     }
 
+    /**
+     * Disposes the analysis parameter providers
+     *
+     * @since 2.2
+     */
+    public static void dispose() {
+        fParamProviderInstances.values().forEach(provider -> provider.dispose());
+    }
+
     /**
      * Return the analysis parameter providers advertised in the extension
      * point, and associated with an analysis ID.
@@ -85,13 +94,11 @@ public final class TmfAnalysisParameterProviders {
                     }
                     if (analysisId.equals(id)) {
                         IAnalysisParameterProvider provider = fParamProviderInstances.get(className);
-                        if (provider != null) {
-                            providers.add(provider);
-                        } else {
+                        if (provider == null) {
                             provider = checkNotNull((IAnalysisParameterProvider) ce.createExecutableExtension(CLASS_ATTR));
                             fParamProviderInstances.put(className, provider);
-                            providers.add(provider);
                         }
+                        providers.add(provider);
                     }
                 } catch (InvalidRegistryObjectException | CoreException e) {
                     Activator.logError("Error creating module parameter provider", e); //$NON-NLS-1$
index 028adf763d8f5ac2a07bdb5b80425f58c353ac79..00872a8aed28d1cc40fe25172bd26e84f94eedb5 100644 (file)
@@ -64,4 +64,13 @@ public interface IAnalysisParameterProvider {
      */
     void registerModule(IAnalysisModule module);
 
+
+    /**
+     * Dispose of the parameter provider
+     *
+     * @since 2.2
+     */
+    default void dispose() {
+        /* override to perform any necessary cleanup */
+    }
 }
index 032d0e73f33b0d6c5d4b1cc31941785c14d394aa..ddedde2d4e6c6dd63f2cae0ce761c5296d6c04b3 100644 (file)
@@ -54,6 +54,16 @@ public class TmfAnalysisManager {
 
     }
 
+    /**
+     * Disposes the analysis manager
+     *
+     * @since 2.2
+     */
+    public static void dispose() {
+        TmfAnalysisParameterProviders.dispose();
+        fParamProviderInstances.values().forEach(provider -> provider.dispose());
+    }
+
     /**
      * Registers a new source of modules
      *
index 8cce5b15b9f8b093d45ad3dd60f5ce4345b29866..2826b8106813528f25b7ace1ea74b1522e84f387 100644 (file)
@@ -167,7 +167,9 @@ public class TmfAnalysisModuleHelperConfigElement implements IAnalysisModuleHelp
     public Iterable<TmfAbstractAnalysisRequirement> getAnalysisRequirements() {
         IAnalysisModule module = createModule();
         if (module != null) {
-            return module.getAnalysisRequirements();
+            Iterable<@NonNull TmfAbstractAnalysisRequirement> requirements = module.getAnalysisRequirements();
+            module.dispose();
+            return requirements;
         }
         return Collections.EMPTY_SET;
 
index de09eedf63ece0144a3591e5214171e6e9d868cc..21ab695b7d8ef319e6c1ae4c6cb9b29ac15102a0 100644 (file)
@@ -99,10 +99,12 @@ public class TmfAnalysisModuleOutputs {
                 if (childCe.getName().equals(ANALYSIS_ID_ELEM)) {
                     listener = new TmfNewAnalysisOutputListener(output, childCe.getAttribute(ID_ATTR), null);
                 } else if (childCe.getName().equals(MODULE_CLASS_ELEM)) {
-                    listener = new TmfNewAnalysisOutputListener(output, null, childCe.createExecutableExtension(CLASS_ATTR).getClass().asSubclass(IAnalysisModule.class));
+                    String contributorName = childCe.getContributor().getName();
+                    Class<?> moduleClass = Platform.getBundle(contributorName).loadClass(childCe.getAttribute(CLASS_ATTR));
+                    listener = new TmfNewAnalysisOutputListener(output, null, moduleClass.asSubclass(IAnalysisModule.class));
                 }
             }
-        } catch (InvalidRegistryObjectException | CoreException e) {
+        } catch (InvalidRegistryObjectException | CoreException | ClassNotFoundException e) {
             Activator.logError("Error creating module output listener", e); //$NON-NLS-1$
         }
         return listener;
index ab6ccf5749ccc7759a722ff56bb886bb5468dbe5..f7902d4f7992e22c544197ba48bf14674117f44a 100644 (file)
@@ -39,8 +39,8 @@ import org.eclipse.tracecompass.tmf.core.component.TmfEventProvider;
 import org.eclipse.tracecompass.tmf.core.event.ITmfEvent;
 import org.eclipse.tracecompass.tmf.core.event.ITmfLostEvent;
 import org.eclipse.tracecompass.tmf.core.event.TmfEvent;
-import org.eclipse.tracecompass.tmf.core.event.aspect.TmfBaseAspects;
 import org.eclipse.tracecompass.tmf.core.event.aspect.ITmfEventAspect;
+import org.eclipse.tracecompass.tmf.core.event.aspect.TmfBaseAspects;
 import org.eclipse.tracecompass.tmf.core.exceptions.TmfAnalysisException;
 import org.eclipse.tracecompass.tmf.core.exceptions.TmfTraceException;
 import org.eclipse.tracecompass.tmf.core.request.ITmfEventRequest;
@@ -189,6 +189,7 @@ public abstract class TmfTrace extends TmfEventProvider implements ITmfTrace, IT
     public TmfTrace(final TmfTrace trace) throws TmfTraceException {
         super();
         if (trace == null) {
+            super.dispose();
             throw new IllegalArgumentException();
         }
         fCacheSize = trace.getCacheSize();
@@ -241,6 +242,7 @@ public abstract class TmfTrace extends TmfEventProvider implements ITmfTrace, IT
             final Class<? extends ITmfEvent> type)
                     throws TmfTraceException {
         if (path == null) {
+            dispose();
             throw new TmfTraceException("Invalid trace path"); //$NON-NLS-1$
         }
         fPath = path;
index e3d61e854170bcaf28b2d26b4ba231f812816b25..b7332b8cc25c41d920cff205c085343cc99b403b 100644 (file)
@@ -106,6 +106,17 @@ public final class TmfTraceManager {
         return mgr;
     }
 
+    /**
+     * Disposes the trace manager
+     *
+     * @since 2.2
+     */
+    public void dispose() {
+        TmfSignalManager.deregister(this);
+        fTraces.clear();
+        fCurrentTrace = null;
+    }
+
     // ------------------------------------------------------------------------
     // Accessors
     // ------------------------------------------------------------------------
index d577b0ca8d703cb90851ec6760b7238912737bc2..3cbceefb05f0af49c214f1d04196c6eb6a0b2693 100644 (file)
@@ -21,11 +21,13 @@ import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.jface.resource.ImageRegistry;
 import org.eclipse.swt.graphics.Image;
 import org.eclipse.tracecompass.internal.tmf.ui.markers.LostEventsMarkerEventSourceFactory;
+import org.eclipse.tracecompass.internal.tmf.ui.views.TmfAlignmentSynchronizer;
 import org.eclipse.tracecompass.tmf.core.event.ITmfEvent;
 import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
 import org.eclipse.tracecompass.tmf.core.trace.TmfTraceAdapterManager;
 import org.eclipse.tracecompass.tmf.ui.TmfUiRefreshHandler;
 import org.eclipse.tracecompass.tmf.ui.project.model.TmfExperimentElement;
+import org.eclipse.tracecompass.tmf.ui.project.model.TmfProjectRegistry;
 import org.eclipse.tracecompass.tmf.ui.project.model.TmfTraceElement;
 import org.eclipse.tracecompass.tmf.ui.viewers.events.TmfEventAdapterFactory;
 import org.eclipse.ui.plugin.AbstractUIPlugin;
@@ -105,6 +107,8 @@ public class Activator extends AbstractUIPlugin {
     public void stop(BundleContext context) throws Exception {
         TmfUiTracer.stop();
         TmfUiRefreshHandler.getInstance().dispose();
+        TmfAlignmentSynchronizer.getInstance().dispose();
+        TmfProjectRegistry.dispose();
         plugin = null;
 
         Platform.getAdapterManager().unregisterAdapters(fTmfEventAdapterFactory);
index adcdadfe0cf9e206de3103e7558b7beda449dfbb..cbbc4fb6488b6616ee385dc78c9542afa6d42fe0 100644 (file)
@@ -252,7 +252,7 @@ public class OffsetDialog extends Dialog {
         composite.addDisposeListener(new DisposeListener() {
             @Override
             public void widgetDisposed(DisposeEvent e) {
-                TmfSignalManager.deregister(this);
+                TmfSignalManager.deregister(OffsetDialog.this);
             }
         });
         return area;
index 7de2ca6bcb9f811abaf40546de00caff8ff6e994..78dcaead746e16bfc72416f18620ad2620305576 100644 (file)
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2015 Ericsson
+ * Copyright (c) 2015, 2016 Ericsson
  *
  * All rights reserved. This program and the accompanying materials are
  * made available under the terms of the Eclipse Public License v1.0 which
@@ -49,6 +49,10 @@ public class TmfAlignmentSynchronizer {
 
     private static final long THROTTLE_DELAY = 500;
     private static final int NEAR_THRESHOLD = 10;
+
+    /** Singleton instance */
+    private static TmfAlignmentSynchronizer fInstance = null;
+
     private final Timer fTimer;
     private final List<AlignmentOperation> fPendingOperations = Collections.synchronizedList(new ArrayList<AlignmentOperation>());
 
@@ -57,7 +61,7 @@ public class TmfAlignmentSynchronizer {
     /**
      * Constructor
      */
-    public TmfAlignmentSynchronizer() {
+    private TmfAlignmentSynchronizer() {
         TmfSignalManager.register(this);
         fTimer = new Timer();
         createPreferenceListener();
@@ -69,6 +73,27 @@ public class TmfAlignmentSynchronizer {
         };
     }
 
+    /**
+     * Get the alignment synchronizer's instance
+     *
+     * @return The singleton instance
+     */
+    public static synchronized TmfAlignmentSynchronizer getInstance() {
+        if (fInstance == null) {
+            fInstance = new TmfAlignmentSynchronizer();
+        }
+        return fInstance;
+    }
+
+    /**
+     * Disposes the alignment synchronizer
+     */
+    public void dispose() {
+        TmfSignalManager.deregister(this);
+        fTimer.cancel();
+        fCurrentTask.cancel();
+    }
+
     private IPreferenceChangeListener createPreferenceListener() {
         IPreferenceChangeListener listener = new IPreferenceChangeListener() {
 
index 4f073cd77032b1bd887193ee20cbc566ce762ba7..05624c30298c9cdf3a2f67a9d72c89d0f8a10430 100644 (file)
@@ -112,4 +112,14 @@ public interface ITmfProjectModelElement {
     default boolean hasChildren() {
         return !getChildren().isEmpty();
     }
+
+    /**
+     * Recursively dispose of the element and its children.
+     *
+     * @since 2.2
+     */
+    default void dispose() {
+        getChildren().forEach(element -> element.dispose());
+        /* override to perform any necessary cleanup */
+    }
 }
index a1d3342d990941332f821485318cff46964a7762..0b3aa0c2d98a1f41d3ee3011b399583879666cf6 100644 (file)
@@ -101,9 +101,15 @@ public abstract class TmfCommonProjectElement extends TmfProjectModelElement {
     }
 
     // ------------------------------------------------------------------------
-    // TmfProjectModelElement
+    // ITmfProjectModelElement
     // ------------------------------------------------------------------------
 
+    @Override
+    public void dispose() {
+        super.dispose();
+        TmfSignalManager.deregister(this);
+    }
+
     /**
      * @since 2.0
      */
index b87817159eb942cc01c2db00e9e611d9ceeb6863..cbf481a6525b0670ba08b57075b6226cbf6e8be7 100644 (file)
@@ -218,12 +218,15 @@ public abstract class TmfProjectModelElement implements ITmfProjectModelElement
 
     /**
      * Remove an element from the current child elements.
+     * <p>
+     * Disposes the removed element. It should no longer be used.
      *
      * @param child
      *            The child to remove
      */
     protected void removeChild(ITmfProjectModelElement child) {
         fChildren.remove(child);
+        child.dispose();
     }
 
     /**
index 14cfa4199acc543e6cb378e2d2f7202dab30a5cc..56bd8ccb294dd8630ca90e1df13fa5f68edd1411 100644 (file)
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011, 2014 Ericsson
+ * Copyright (c) 2011, 2016 Ericsson
  *
  * All rights reserved. This program and the accompanying materials are
  * made available under the terms of the Eclipse Public License v1.0 which
@@ -47,9 +47,7 @@ import org.eclipse.ui.actions.WorkspaceModifyOperation;
 public class TmfProjectRegistry implements IResourceChangeListener {
 
     // Create the singleton instance
-    static {
-        new TmfProjectRegistry();
-    }
+    private static final TmfProjectRegistry INSTANCE = new TmfProjectRegistry();
 
     // The map of project resource to project model elements
     private static Map<IProject, TmfProjectElement> registry = new HashMap<>();
@@ -58,6 +56,16 @@ public class TmfProjectRegistry implements IResourceChangeListener {
         ResourcesPlugin.getWorkspace().addResourceChangeListener(this);
     }
 
+    /**
+     * Disposes the project registry
+     *
+     * @since 2.2
+     */
+    public static void dispose() {
+        ResourcesPlugin.getWorkspace().removeResourceChangeListener(INSTANCE);
+        registry.values().forEach(projectElement -> projectElement.dispose());
+    }
+
     /**
      * Get the project model element for a project resource
      * @param project the project resource
@@ -188,7 +196,10 @@ public class TmfProjectRegistry implements IResourceChangeListener {
                             TmfProjectElement projectElement = getProject(project, true);
                             projectElement.refresh();
                         } else if (delta.getKind() == IResourceDelta.REMOVED) {
-                            registry.remove(project);
+                            TmfProjectElement projectElement = registry.remove(project);
+                            if (projectElement != null) {
+                                projectElement.dispose();
+                            }
                         }
                     } catch (CoreException e) {
                         Activator.getDefault().logError("Error handling resource change event for " + project.getName(), e); //$NON-NLS-1$
index b480b03a98b558452793f9371b4ca75908e655fd..65915cdb56c22eec342da1ac142056115b1c92c2 100644 (file)
@@ -176,6 +176,7 @@ public abstract class TmfChartView extends TmfView implements ITmfTimeAligned {
 
     @Override
     public void dispose() {
+        super.dispose();
         if (fChartViewer != null) {
             fChartViewer.dispose();
         }
index c9a3ab3cc01a13bd596c0858c46c0fae283afdbe..b609a77f352c3dbb42b5afaeb77741dba5a6817c 100644 (file)
@@ -41,11 +41,11 @@ import org.eclipse.ui.part.ViewPart;
  */
 public abstract class TmfView extends ViewPart implements ITmfComponent {
 
+    private static final TmfAlignmentSynchronizer TIME_ALIGNMENT_SYNCHRONIZER = TmfAlignmentSynchronizer.getInstance();
     private final String fName;
     /** This allows us to keep track of the view sizes */
     private Composite fParentComposite;
     private ControlAdapter fControlListener;
-    private static final TmfAlignmentSynchronizer TIME_ALIGNMENT_SYNCHRONIZER = new TmfAlignmentSynchronizer();
 
     /**
      * Action class for pinning of TmfView.
This page took 0.087872 seconds and 5 git commands to generate.