]> source.dussan.org Git - vaadin-framework.git/commitdiff
Fixed a memory leak introduced in the fix for #6722, this also fixes a potential...
authorJonatan Kronqvist <jonatan.kronqvist@itmill.com>
Fri, 17 Jun 2011 09:17:38 +0000 (09:17 +0000)
committerJonatan Kronqvist <jonatan.kronqvist@itmill.com>
Fri, 17 Jun 2011 09:17:38 +0000 (09:17 +0000)
svn changeset:19445/svn branch:6.7

src/com/vaadin/ui/Table.java

index dfa4aad0059691a71d0d53efa69761e30ae98a86..94e917d3720818aeaf0973fc1e3acecf71050987 100644 (file)
@@ -1428,10 +1428,6 @@ public class Table extends AbstractSelect implements Action.Container,
             return;
         }
 
-        // initialize the listener collections
-        listenedProperties = new HashSet<Property>();
-        visibleComponents = new HashSet<Component>();
-
         // Collects the basic facts about the table page
         final int pagelen = getPageLength();
         int firstIndex = getCurrentPageFirstItemIndex();
@@ -1467,7 +1463,7 @@ public class Table extends AbstractSelect implements Action.Container,
         }
 
         // Saves the results to internal buffer
-        pageBuffer = getVisibleCellsNoCache(firstIndex, rows);
+        pageBuffer = getVisibleCellsNoCache(firstIndex, rows, true);
 
         if (rows > 0) {
             pageBufferFirstIndex = firstIndex;
@@ -1478,12 +1474,24 @@ public class Table extends AbstractSelect implements Action.Container,
     }
 
     private Object[][] getVisibleCellsNoCache(int firstIndex, int rows) {
+        return getVisibleCellsNoCache(firstIndex, rows, false);
+    }
+
+    private Object[][] getVisibleCellsNoCache(int firstIndex, int rows,
+            boolean replaceListeners) {
         final Object[] colids = getVisibleColumns();
         final int cols = colids.length;
 
         HashSet<Property> oldListenedProperties = listenedProperties;
         HashSet<Component> oldVisibleComponents = visibleComponents;
 
+        if (replaceListeners) {
+            // initialize the listener collections, this should only be done if
+            // the entire cache is refreshed (through refreshRenderedCells)
+            listenedProperties = new HashSet<Property>();
+            visibleComponents = new HashSet<Component>();
+        }
+
         Object[][] cells = new Object[cols + CELL_FIRSTCOL][rows];
         if (rows == 0) {
             unregisterPropertiesAndComponents(oldListenedProperties,