r27264 - trunk/freenet/src/freenet/client/async

[email protected] Thu, 23 Apr 2009 17:22:45 +0000
Newsgroups gmane.network.freenet.cvs
Message-ID <[email protected]>
Author: toad
Date: 2009-04-23 17:22:45 +0000 (Thu, 23 Apr 2009)
New Revision: 27264

Modified:
   trunk/freenet/src/freenet/client/async/USKFetcher.java
Log:
Revert and document


Modified: trunk/freenet/src/freenet/client/async/USKFetcher.java
===================================================================
--- trunk/freenet/src/freenet/client/async/USKFetcher.java	2009-04-23 16:56:49 UTC (rev 27263)
+++ trunk/freenet/src/freenet/client/async/USKFetcher.java	2009-04-23 17:22:45 UTC (rev 27264)
@@ -670,11 +670,14 @@
 
 	public void onFoundEdition(long ed, USK key, ObjectContainer container, final ClientContext context, boolean metadata, short codec, byte[] data, boolean newKnownGood, boolean newSlotToo) {
 		if(newKnownGood && !newSlotToo) return; // Only interested in slots
+		// Because this is frequently run off-thread, it is actually possible that the looked up edition is not the same as the edition we are being notified of.
+		final long lastEd = uskManager.lookupLatestSlot(origUSK);
 		boolean decode = false;
 		Vector<USKAttempt> killAttempts;
 		synchronized(this) {
 			if(completed || cancelled) return;
-			decode = data != null;
+			decode = lastEd >= ed && data != null;
+			ed = Math.max(lastEd, ed);
 			if(logMINOR) Logger.minor(this, "Latest: "+ed);
 			long addTo = ed + minFailures;
 			long addFrom = Math.max(lastAddedEdition + 1, ed + 1);