Author: toad
Date: 2008-04-30 16:27:57 +0000 (Wed, 30 Apr 2008)
New Revision: 19628

Modified:
   trunk/freenet/src/freenet/store/BerkeleyDBFreenetStore.java
Log:
Once have reached the end of the keys file, don't continue to use the last key.
May fix "Duplicate block" errors during reconstruction.

Modified: trunk/freenet/src/freenet/store/BerkeleyDBFreenetStore.java
===================================================================
--- trunk/freenet/src/freenet/store/BerkeleyDBFreenetStore.java 2008-04-30 
16:20:07 UTC (rev 19627)
+++ trunk/freenet/src/freenet/store/BerkeleyDBFreenetStore.java 2008-04-30 
16:27:57 UTC (rev 19628)
@@ -1009,7 +1009,7 @@
                                        Logger.normal(this, "Block "+l+" : LRU 
"+lruVal);
                                }
                                boolean readKey = false;
-                               if(keysRAF != null && keysRAFLength > 
(l+1)*keyLength) {
+                               if(keysRAF != null && keyBuf != null && 
keysRAFLength > (l+1)*keyLength) {
                                        try {
                                                keysRAF.readFully(keyBuf);
                                                readKey = true;
@@ -1018,6 +1018,7 @@
                                                readKey = false;
                                        }
                                }
+                               if(!readKey) keyBuf = null;
                                try {
                                        byte[] routingkey = null;
                                        if(keyBuf != null && 
!isAllNull(keyBuf)) {
@@ -1031,7 +1032,7 @@
                                        }
                                        if (routingkey == null && 
!isAllNull(header) && !isAllNull(data)) {
                                                try {
-                                                       StorableBlock block = 
callback.construct(data, header, null, readKey ? keyBuf : null);
+                                                       StorableBlock block = 
callback.construct(data, header, null, keyBuf);
                                                        routingkey = 
block.getRoutingKey();
                                                } catch (KeyVerifyException e) {
                                                        String err = "Bogus or 
unreconstructible key at slot "+l+" : "+e+" - lost block "+l;


Reply via email to