Fix for bug 390841: Experiment does not dispose trace contexts.
authorPatrick Tasse <patrick.tasse@gmail.com>
Wed, 3 Oct 2012 19:32:53 +0000 (15:32 -0400)
committerPatrick Tasse <patrick.tasse@gmail.com>
Wed, 3 Oct 2012 19:56:45 +0000 (15:56 -0400)
Change-Id: Ib2ac07efc2f4b4efbb15971bbaa48401997fa215
Reviewed-on: https://git.eclipse.org/r/8002
Tested-by: Hudson CI
Reviewed-by: Patrick Tasse <patrick.tasse@gmail.com>
IP-Clean: Patrick Tasse <patrick.tasse@gmail.com>
Tested-by: Patrick Tasse <patrick.tasse@gmail.com>
org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/internal/tmf/core/trace/TmfExperimentContext.java
org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/trace/TmfExperiment.java
org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/trace/TmfTrace.java
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/internal/tmf/ui/parsers/custom/CustomTxtTrace.java
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/internal/tmf/ui/parsers/custom/CustomXmlTrace.java
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/viewers/events/TmfEventsTable.java

index 2ea22050bff036cfb3acfb2ccc3af0e22c6d5f69..816db8ba6f272b7edeb375fada3ae4978c6a96f3 100644 (file)
@@ -100,6 +100,17 @@ public class TmfExperimentContext extends TmfContext {
         setLastTrace(other.fLastTraceRead);
     }
 
+    /* (non-Javadoc)
+     * @see org.eclipse.linuxtools.tmf.core.trace.TmfContext#dispose()
+     */
+    @Override
+    public void dispose() {
+        for (ITmfContext context : fContexts) {
+            context.dispose();
+        }
+        super.dispose();
+    }
+
     /* (non-Javadoc)
      * @see org.eclipse.linuxtools.tmf.core.trace.TmfContext#clone()
      */
index b4f85fa0f1d3edad9847cce2f43a00484ebb1fd4..43a88371c1f84cc92d399b95a839ee5964f74a42 100644 (file)
@@ -78,10 +78,6 @@ public class TmfExperiment<T extends ITmfEvent> extends TmfTrace<T> implements I
      */
     private IFile fBookmarksFile;
 
-
-    // Saved experiment context (optimization)
-    private TmfExperimentContext fExperimentContext;
-
     // ------------------------------------------------------------------------
     // Construction
     // ------------------------------------------------------------------------
@@ -206,6 +202,7 @@ public class TmfExperiment<T extends ITmfEvent> extends TmfTrace<T> implements I
     public ITmfTimestamp getTimestamp(final int index) {
         final ITmfContext context = seekEvent(index);
         final ITmfEvent event = getNext(context);
+        context.dispose();
         return (event != null) ? event.getTimestamp() : null;
     }
 
@@ -252,11 +249,6 @@ public class TmfExperiment<T extends ITmfEvent> extends TmfTrace<T> implements I
 
         }
 
-        // Check if we are already at the right index
-        if ((fExperimentContext != null) && fExperimentContext.getRank() == request.getIndex()) {
-            return fExperimentContext;
-        }
-
         return seekEvent(request.getIndex());
     }
 
@@ -303,7 +295,6 @@ public class TmfExperiment<T extends ITmfEvent> extends TmfTrace<T> implements I
         context.setLastTrace(TmfExperimentContext.NO_TRACE);
         context.setRank((location == null) ? 0 : ITmfContext.UNKNOWN_RANK);
 
-        fExperimentContext = context;
         return context;
     }
 
@@ -412,7 +403,6 @@ public class TmfExperiment<T extends ITmfEvent> extends TmfTrace<T> implements I
                     location.getLocation().getLocations()[trace] = traceContext.getLocation().clone();
                 }
 
-                fExperimentContext = expContext.clone();
                 processEvent(event);
             }
         }
@@ -443,6 +433,7 @@ public class TmfExperiment<T extends ITmfEvent> extends TmfTrace<T> implements I
         if (getStreamingInterval() == 0) {
             final ITmfContext context = seekEvent(0);
             final ITmfEvent event = getNext(context);
+            context.dispose();
             if (event == null) {
                 return;
             }
index a1ccadb03ee7c4fe22832caf39b750329160f364..26c25e23968dbc36acaee7046c721f4dbbc165d3 100644 (file)
@@ -484,9 +484,11 @@ public abstract class TmfTrace<T extends ITmfEvent> extends TmfEventProvider<T>
         final ITmfContext nextEventContext = context.clone(); // Must use clone() to get the right subtype...
         ITmfEvent event = getNext(nextEventContext);
         while (event != null && event.getTimestamp().compareTo(timestamp, false) < 0) {
+            context.dispose();
             context = nextEventContext.clone();
             event = getNext(nextEventContext);
         }
+        nextEventContext.dispose();
         if (event == null) {
             context.setLocation(null);
             context.setRank(ITmfContext.UNKNOWN_RANK);
index 4f3ddcc67eefee222d7dbf7871a46c0426cbd66a..270a2e21343c9678b0382b191043618030585f9a 100644 (file)
@@ -1,11 +1,11 @@
 /*******************************************************************************
  * Copyright (c) 2010 Ericsson
- * 
+ *
  * All rights reserved. This program and the accompanying materials are
  * made available under the terms of the Eclipse Public License v1.0 which
  * accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- * 
+ *
  * Contributors:
  *   Patrick Tasse - Initial API and implementation
  *******************************************************************************/
@@ -171,7 +171,7 @@ public class CustomTxtTrace extends TmfTrace<CustomTxtEvent> implements ITmfEven
 
     @Override
     public synchronized CustomTxtEvent getNext(final ITmfContext context) {
-        final ITmfContext savedContext = context.clone();
+        final ITmfContext savedContext = new TmfContext(context.getLocation(), context.getRank());
         final CustomTxtEvent event = parse(context);
         if (event != null) {
             updateAttributes(savedContext, event.getTimestamp());
index 418487c308ee4be11f77bcabff4a00e4c708892c..df39f71c30d0127809b69cbc9c5d63cde301e1e2 100644 (file)
@@ -1,11 +1,11 @@
 /*******************************************************************************
  * Copyright (c) 2010 Ericsson
- * 
+ *
  * All rights reserved. This program and the accompanying materials are
  * made available under the terms of the Eclipse Public License v1.0 which
  * accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- * 
+ *
  * Contributors:
  *   Patrick Tasse - Initial API and implementation
  *******************************************************************************/
@@ -176,7 +176,7 @@ public class CustomXmlTrace extends TmfTrace<CustomXmlEvent> implements ITmfEven
 
     @Override
     public synchronized CustomXmlEvent getNext(final ITmfContext context) {
-        final ITmfContext savedContext = context.clone();
+        final ITmfContext savedContext = new TmfContext(context.getLocation(), context.getRank());
         final CustomXmlEvent event = parse(context);
         if (event != null) {
             updateAttributes(savedContext, event.getTimestamp());
index edf7cc399e0decbf1035b9df95bd9388d10fbd43..e114a895d2506da7fe12a2e683f35c508347b178 100644 (file)
@@ -1848,6 +1848,7 @@ public class TmfEventsTable extends TmfComponent implements IGotoMarker,
                     // Get the rank of the selected event in the table
                     final ITmfContext context = fTrace.seekEvent(timestamp);
                     final long rank = context.getRank();
+                    context.dispose();
                     fSelectedRank = rank;
 
                     fTable.getDisplay().asyncExec(new Runnable() {
This page took 0.029696 seconds and 5 git commands to generate.