[freenet-cvs] r15500 - trunk/freenet/src/freenet/node

nextgens at freenetproject.org nextgens at freenetproject.org
Tue Oct 23 15:48:02 UTC 2007


Author: nextgens
Date: 2007-10-23 15:48:01 +0000 (Tue, 23 Oct 2007)
New Revision: 15500

Modified:
   trunk/freenet/src/freenet/node/FNPPacketMangler.java
Log:
JFK: make the JFK-buffer pruning deterministic

Modified: trunk/freenet/src/freenet/node/FNPPacketMangler.java
===================================================================
--- trunk/freenet/src/freenet/node/FNPPacketMangler.java	2007-10-23 15:31:11 UTC (rev 15499)
+++ trunk/freenet/src/freenet/node/FNPPacketMangler.java	2007-10-23 15:48:01 UTC (rev 15500)
@@ -2476,6 +2476,7 @@
 		node.executor.execute(new Runnable() {
 			public void run() {
 				synchronized (dhContextFIFO) {
+					dhContextFIFO.remove(findOldestContext());
 					dhContextFIFO.addLast(_genLightDiffieHellmanContext());
 				}
 			}
@@ -2548,6 +2549,29 @@
 		}
 		return null;
 	}
+	
+	/**
+	 * Used to prune the oldest context
+	 * That's O^(N)... but we have only a few elements.
+	 * 
+	 * @return the oldest DiffieHellmanLightContext
+	 */
+	private DiffieHellmanLightContext findOldestContext() {
+		DiffieHellmanLightContext result = null, tmp;
+		long oldestSeen = Long.MAX_VALUE;
+		
+		synchronized (dhContextFIFO) {
+			Iterator it = dhContextFIFO.iterator();
+			while(it.hasNext()) {
+				tmp = (DiffieHellmanLightContext) it.next();
+				if(result.lifetime < oldestSeen) {
+					oldestSeen = result.lifetime;
+					result = tmp;
+				}
+			}
+		}
+		return result;
+	}
 
 	/*
 	 * Prepare DH parameters of message2 for them to be signed (useful in message3 to check the sig)




More information about the cvs mailing list