From b5ee68812e8b6d9db8c20809101285b0fa72f83d Mon Sep 17 00:00:00 2001 From: Francois Chouinard Date: Wed, 30 May 2012 18:01:25 -0400 Subject: [PATCH] Implement index cancellation on dispose (bug 381115) --- .../tmf/core/trace/ITmfTraceIndexer.java | 5 +++++ .../tmf/core/trace/TmfCheckpointIndexer.java | 22 ++++++++++++++++--- .../tmf/core/trace/TmfExperiment.java | 3 +++ .../linuxtools/tmf/core/trace/TmfTrace.java | 10 +++++++++ 4 files changed, 37 insertions(+), 3 deletions(-) diff --git a/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/trace/ITmfTraceIndexer.java b/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/trace/ITmfTraceIndexer.java index afddaf7898..e0bec7cc70 100644 --- a/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/trace/ITmfTraceIndexer.java +++ b/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/trace/ITmfTraceIndexer.java @@ -91,4 +91,9 @@ public interface ITmfTraceIndexer> { */ public ITmfContext seekIndex(long rank); + /** + * Perform cleanup when the indexer is no longer required. + */ + public void dispose(); + } diff --git a/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/trace/TmfCheckpointIndexer.java b/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/trace/TmfCheckpointIndexer.java index 5ab1322c66..c82b4688e9 100644 --- a/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/trace/TmfCheckpointIndexer.java +++ b/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/trace/TmfCheckpointIndexer.java @@ -69,6 +69,11 @@ public class TmfCheckpointIndexer> implements ITm */ private final List fTraceIndex; + /** + * The indexing request + */ + private ITmfEventRequest fIndexingRequest = null; + // ------------------------------------------------------------------------ // Construction // ------------------------------------------------------------------------ @@ -96,6 +101,17 @@ public class TmfCheckpointIndexer> implements ITm fIsIndexing = false; } + /* (non-Javadoc) + * @see org.eclipse.linuxtools.tmf.core.trace.ITmfTraceIndexer#dispose() + */ + @Override + public void dispose() { + if ((fIndexingRequest != null) && !fIndexingRequest.isCompleted()) { + fIndexingRequest.cancel(); + fTraceIndex.clear(); + } + } + // ------------------------------------------------------------------------ // ITmfTraceIndexer - isIndexing // ------------------------------------------------------------------------ @@ -155,7 +171,7 @@ public class TmfCheckpointIndexer> implements ITm // Build a background request for all the trace data. The index is // updated as we go by readNextEvent(). - final ITmfEventRequest request = new TmfEventRequest(ITmfEvent.class, + fIndexingRequest = new TmfEventRequest(ITmfEvent.class, range, offset, TmfDataRequest.ALL_DATA, fCheckpointInterval, ITmfDataRequest.ExecutionType.BACKGROUND) { private ITmfTimestamp startTime = null; @@ -198,10 +214,10 @@ public class TmfCheckpointIndexer> implements ITm }; // Submit the request and wait for completion if required - fTrace.sendRequest(request); + fTrace.sendRequest(fIndexingRequest); if (waitForCompletion) { try { - request.waitForCompletion(); + fIndexingRequest.waitForCompletion(); } catch (final InterruptedException e) { } } diff --git a/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/trace/TmfExperiment.java b/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/trace/TmfExperiment.java index ce196c98ad..4b23e55eb2 100644 --- a/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/trace/TmfExperiment.java +++ b/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/trace/TmfExperiment.java @@ -131,6 +131,9 @@ public class TmfExperiment extends TmfTrace implements I fCurrentExperiment = null; } + // Clean up the index + getIndexer().dispose(); + if (fTraces != null) { for (final ITmfTrace trace : fTraces) trace.dispose(); diff --git a/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/trace/TmfTrace.java b/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/trace/TmfTrace.java index 7c0d843951..f17faab4bd 100644 --- a/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/trace/TmfTrace.java +++ b/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/trace/TmfTrace.java @@ -246,6 +246,16 @@ public abstract class TmfTrace extends TmfEventProvider getIndexer().buildIndex(0, TmfTimeRange.ETERNITY, waitForCompletion); } + /** + * Clears the trace + */ + @Override + public synchronized void dispose() { + // Clean up the index + getIndexer().dispose(); + super.dispose(); + } + // ------------------------------------------------------------------------ // ITmfTrace - Basic getters // ------------------------------------------------------------------------ -- 2.34.1