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();
}
}