Author: toad
Date: 2007-10-24 16:36:13 +0000 (Wed, 24 Oct 2007)
New Revision: 15534

Modified:
   trunk/freenet/src/freenet/node/FNPPacketMangler.java
Log:
Fill up the FIFO on startup. Should fix the "WTF? the HMAC verified but we 
don't know about that exponential! SHOULDN'T HAPPEN!" messages.

Modified: trunk/freenet/src/freenet/node/FNPPacketMangler.java
===================================================================
--- trunk/freenet/src/freenet/node/FNPPacketMangler.java        2007-10-24 
16:29:01 UTC (rev 15533)
+++ trunk/freenet/src/freenet/node/FNPPacketMangler.java        2007-10-24 
16:36:13 UTC (rev 15534)
@@ -152,6 +152,9 @@
        public void start() {
                // Run it directly so that the transient key is set.
                maybeResetTransientKey();
+               // Fill the DH FIFO on-thread
+               for(int i=0;i<DH_CONTEXT_BUFFER_SIZE;i++)
+                       _fillJFKDHFIFO();
        }


@@ -2488,19 +2491,24 @@
                return ctx;
        }

-       private final void _fillJFKDHFIFO() {
+       private final void _fillJFKDHFIFOOffThread(final int count) {
                // do it off-thread
                node.executor.execute(new Runnable() {
                        public void run() {
-                               synchronized (dhContextFIFO) {
-                                       
dhContextFIFO.addLast(_genLightDiffieHellmanContext());
-                                       if(dhContextFIFO.size() > 
DH_CONTEXT_BUFFER_SIZE)
-                                               
dhContextFIFO.remove(findOldestContext());
-                               }
+                               for(int i=0;i<count;i++)
+                                       _fillJFKDHFIFO();
                        }
                }, "DiffieHellman exponential signing");
        }

+       private void _fillJFKDHFIFO() {
+               synchronized (dhContextFIFO) {
+                       dhContextFIFO.addLast(_genLightDiffieHellmanContext());
+                       if(dhContextFIFO.size() > DH_CONTEXT_BUFFER_SIZE)
+                               dhContextFIFO.remove(findOldestContext());
+               }
+       }
+
        /**
         * Change the DH Exponents on a regular basis but at most once every 
30sec
         * 
@@ -2511,27 +2519,16 @@
         */
        private DiffieHellmanLightContext getLightDiffieHellmanContext() {
                final long now = System.currentTimeMillis();
-               int dhContextFIFOSize = 0;
                DiffieHellmanLightContext result = null;

                synchronized (dhContextFIFO) {
-                       dhContextFIFOSize = dhContextFIFO.size();

-                       if(dhContextFIFOSize < 1) {
-                               // We need one exponent, generate it at all 
cost! (startup)
-                               Logger.minor(this, "No DH exponent have been 
created; generate the context on-thread!");
-                               for(int i=dhContextFIFOSize; 
i<DH_CONTEXT_BUFFER_SIZE-1; i++)
-                                       _fillJFKDHFIFO();
-                               
-                               result = _genLightDiffieHellmanContext();
-                       } else {
-                               result = (DiffieHellmanLightContext) 
dhContextFIFO.removeFirst();
-                               
-                               // Shall we replace one element of the queue ?
-                               if((jfkDHLastGenerationTimestamp + 30000 
/*30sec*/) < now) {
-                                       jfkDHLastGenerationTimestamp = now;
-                                       _fillJFKDHFIFO();
-                               }
+                       result = (DiffieHellmanLightContext) 
dhContextFIFO.removeFirst();
+                       
+                       // Shall we replace one element of the queue ?
+                       if((jfkDHLastGenerationTimestamp + 30000 /*30sec*/) < 
now) {
+                               jfkDHLastGenerationTimestamp = now;
+                               _fillJFKDHFIFOOffThread(1);
                        }

                        dhContextFIFO.addLast(result);


Reply via email to