On Friday 18 July 2008 16:50, nextgens at freenetproject.org wrote:
> Author: nextgens
> Date: 2008-07-18 15:50:32 +0000 (Fri, 18 Jul 2008)
> New Revision: 21211
> 
> Modified:
>    trunk/freenet/src/freenet/clients/http/StartupToadlet.java
>    trunk/freenet/src/freenet/node/Node.java
> Log:
> Generate some disk accesses in case we can't get enough entropy from the OS' 
PRNG to seed Yarrow

The thread won't run for long because isPRNGReady is set immediately after 
starting it.
> 
> Modified: trunk/freenet/src/freenet/clients/http/StartupToadlet.java
> ===================================================================
> --- trunk/freenet/src/freenet/clients/http/StartupToadlet.java        
> 2008-07-18 
13:59:27 UTC (rev 21210)
> +++ trunk/freenet/src/freenet/clients/http/StartupToadlet.java        
> 2008-07-18 
15:50:32 UTC (rev 21211)
> @@ -20,6 +20,7 @@
>               this.staticToadlet = staticToadlet;
>       }
>  
> +     @Override
>       public void handleGet(URI uri, HTTPRequest req, ToadletContext ctx) 
> throws 
ToadletContextClosedException, IOException, RedirectException {
>               // If we don't disconnect we will have pipelining issues
>               ctx.forceDisconnect();
> 
> Modified: trunk/freenet/src/freenet/node/Node.java
> ===================================================================
> --- trunk/freenet/src/freenet/node/Node.java  2008-07-18 13:59:27 UTC (rev 
21210)
> +++ trunk/freenet/src/freenet/node/Node.java  2008-07-18 15:50:32 UTC (rev 
21211)
> @@ -118,6 +118,7 @@
>  import freenet.support.io.FileUtil;
>  import freenet.support.io.NativeThread;
>  import freenet.support.transport.ip.HostnameSyntaxException;
> +import java.io.FileFilter;
>  
>  /**
>   * @author amphibian
> @@ -483,6 +484,8 @@
>        */
>       private static final int MIN_UPTIME_STORE_KEY = 40;
>       
> +     private volatile boolean isPRNGReady = false;
> +     
>       /**
>        * Read all storable settings (identity etc) from the node file.
>        * @param filename The name of the file to read from.
> @@ -662,13 +665,42 @@
>               }
>  
>               // Setup RNG if needed : DO NOT USE IT BEFORE THAT POINT!
> -             this.random = (r == null ? new Yarrow() : r);
> -             if(r == null) // if it's not null it's because we are running 
> in the 
simulator
> +             if(r == null) {
> +                     final NativeThread entropyGatheringThread = new 
> NativeThread(new 
Runnable() {
> +
> +                             private void recurse(File f) {
> +                                     if(isPRNGReady)
> +                                             return;
> +                                     File[] subDirs = f.listFiles(new 
> FileFilter() {
> +
> +                                             public boolean accept(File 
> pathname) {
> +                                                     return 
> pathname.exists() && pathname.canRead() && 
pathname.isDirectory();
> +                                             }
> +                                     });
> +
> +                                     for(File currentDir : subDirs)
> +                                             recurse(currentDir);
> +                             }
> +
> +                             public void run() {
> +                                     for(File root : File.listRoots()) {
> +                                             if(isPRNGReady)
> +                                                     return;
> +                                             recurse(root);
> +                                     }
> +                             }
> +                     }, "Entropy Gathering Thread", 
> NativeThread.MIN_PRIORITY, true);
> +
> +                     entropyGatheringThread.start();
> +                     this.random = new Yarrow();
>                       DiffieHellman.init(random);
> +             } else // if it's not null it's because we are running in the 
> simulator
> +                     this.random = r;
> +             isPRNGReady = true;
> +             toadlets.getStartupToadlet().setIsPRNGReady();
>               byte buffer[] = new byte[16];
>               random.nextBytes(buffer);
>               this.fastWeakRandom = new MersenneTwister(buffer);
> -             toadlets.getStartupToadlet().setIsPRNGReady();
>  
>               nodeNameUserAlert = new MeaningfulNodeNameUserAlert(this);
>               recentlyCompletedIDs = new LRUQueue();
> 
> _______________________________________________
> cvs mailing list
> cvs at freenetproject.org
> http://emu.freenetproject.org/cgi-bin/mailman/listinfo/cvs
> 
> 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
URL: 
<https://emu.freenetproject.org/pipermail/devl/attachments/20080802/b9f133af/attachment.pgp>

Reply via email to