Author: toad
Date: 2008-02-08 18:54:29 +0000 (Fri, 08 Feb 2008)
New Revision: 17711

Modified:
   trunk/freenet/src/freenet/node/FailureTable.java
   trunk/freenet/src/freenet/support/LRUHashtable.java
Log:
Values not keys! Fix ArrayStoreException in FailureTableCleaner

Modified: trunk/freenet/src/freenet/node/FailureTable.java
===================================================================
--- trunk/freenet/src/freenet/node/FailureTable.java    2008-02-08 18:49:01 UTC 
(rev 17710)
+++ trunk/freenet/src/freenet/node/FailureTable.java    2008-02-08 18:54:29 UTC 
(rev 17711)
@@ -477,7 +477,7 @@
                        FailureTableEntry[] entries;
                        synchronized(FailureTable.this) {
                                entries = new 
FailureTableEntry[entriesByKey.size()];
-                               entriesByKey.toArray(entries);
+                               entriesByKey.valuesToArray(entries);
                        }
                        for(int i=0;i<entries.length;i++) {
                                if(entries[i].cleanup()) {

Modified: trunk/freenet/src/freenet/support/LRUHashtable.java
===================================================================
--- trunk/freenet/src/freenet/support/LRUHashtable.java 2008-02-08 18:49:01 UTC 
(rev 17710)
+++ trunk/freenet/src/freenet/support/LRUHashtable.java 2008-02-08 18:54:29 UTC 
(rev 17711)
@@ -102,6 +102,10 @@
     public Enumeration keys() {
         return new ItemEnumeration();
     }
+    
+    public Enumeration values() {
+       return new ValuesEnumeration();
+    }

     private class ItemEnumeration implements Enumeration {
         private Enumeration source = list.reverseElements();
@@ -115,6 +119,18 @@
         }
     }

+    private class ValuesEnumeration implements Enumeration {
+        private Enumeration source = list.reverseElements();
+       
+        public boolean hasMoreElements() {
+            return source.hasMoreElements();
+        }
+
+        public Object nextElement() {
+            return ((QItem) source.nextElement()).value;
+        }
+    }
+
     private static class QItem extends DoublyLinkedListImpl.Item {
         public Object obj;
         public Object value;
@@ -139,11 +155,11 @@
         * @param entries
         * @return
         */
-       public synchronized void toArray(Object[] entries) {
-               Enumeration keys = keys();
+       public synchronized void valuesToArray(Object[] entries) {
+               Enumeration values = values();
                int i=0;
-               while(keys.hasMoreElements())
-                       entries[i++] = keys.nextElement();
+               while(values.hasMoreElements())
+                       entries[i++] = values.nextElement();
        }

 }


Reply via email to