You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by th...@apache.org on 2010/10/20 13:25:29 UTC

svn commit: r1025505 - /jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/id/SeededSecureRandom.java

Author: thomasm
Date: Wed Oct 20 11:25:29 2010
New Revision: 1025505

URL: http://svn.apache.org/viewvc?rev=1025505&view=rev
Log:
JCR-2795 Initializing SeededSecureRandom may be slow

Modified:
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/id/SeededSecureRandom.java

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/id/SeededSecureRandom.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/id/SeededSecureRandom.java?rev=1025505&r1=1025504&r2=1025505&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/id/SeededSecureRandom.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/id/SeededSecureRandom.java Wed Oct 20 11:25:29 2010
@@ -45,7 +45,11 @@ class SeededSecureRandom extends SecureR
      */
     public static Random getInstance() {
         if (instance == null) {
-            instance = new SeededSecureRandom();
+            synchronized (SeededSecureRandom.class) {
+                if (instance == null) {
+                    instance = new SeededSecureRandom();
+                }
+            }
         }
         return instance;
     }
@@ -72,6 +76,14 @@ class SeededSecureRandom extends SecureR
         if (!seeded) {
             // Alternative seed algorithm if the default is very slow
             setSeed(System.currentTimeMillis());
+            setSeed(System.nanoTime());
+            setSeed(new Object().hashCode());
+            Runtime runtime = Runtime.getRuntime();
+            setSeed(runtime.freeMemory());
+            setSeed(runtime.maxMemory());
+            setSeed(runtime.totalMemory());
+            setSeed(System.getProperties().toString().hashCode());
+
             // Thread timing (a second thread is already running)
             for (int j = 0; j < 16; j++) {
                 int i = 0;