Author: toad
Date: 2008-06-27 12:16:42 +0000 (Fri, 27 Jun 2008)
New Revision: 20816
Modified:
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerBase.java
Log:
Some paranoia/recovery-from-bugs code.
Should be removed eventually.
The bug was causing us to have the same block on the same subsegment's
blockNums list many many many times (300+ on one).
This caused lots of subsegments (79) to stay registered long term in
pendingKeys for a single key, even though only one of them was valid.
This particular change checks for and ignores duplicate tokens in
addPendingKeys().
Modified:
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerBase.java
===================================================================
---
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerBase.java
2008-06-27 12:13:49 UTC (rev 20815)
+++
branches/db4o/freenet/src/freenet/client/async/ClientRequestSchedulerBase.java
2008-06-27 12:16:42 UTC (rev 20816)
@@ -346,8 +346,14 @@
public void addPendingKeys(SendableGet getter, ObjectContainer
container) {
Object[] keyTokens = getter.sendableKeys(container);
+ Object prevTok = null;
for(int i=0;i<keyTokens.length;i++) {
Object tok = keyTokens[i];
+ if(i != 0 && prevTok == tok || (prevTok != null && tok
!= null && prevTok.equals(tok))) {
+ Logger.error(this, "Ignoring duplicate token");
+ continue;
+ }
+ prevTok = tok;
ClientKey key = getter.getKey(tok, container);
if(getter.persistent())
container.activate(key, 5);