Author: aidan
Date: Thu Dec  3 22:12:06 2009
New Revision: 886945

URL: http://svn.apache.org/viewvc?rev=886945&view=rev
Log:
QPID-1972: fix UUID generation.

Patch from julien.lavigne

Modified:
    qpid/trunk/qpid/dotnet/client-010/client/transport/util/UUID.cs
    qpid/trunk/qpid/dotnet/client-010/test/transport/util/UUIDTest.cs

Modified: qpid/trunk/qpid/dotnet/client-010/client/transport/util/UUID.cs
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/dotnet/client-010/client/transport/util/UUID.cs?rev=886945&r1=886944&r2=886945&view=diff
==============================================================================
--- qpid/trunk/qpid/dotnet/client-010/client/transport/util/UUID.cs (original)
+++ qpid/trunk/qpid/dotnet/client-010/client/transport/util/UUID.cs Thu Dec  3 
22:12:06 2009
@@ -26,9 +26,9 @@
     public class UUID
     {
         private long _mostSigBits;
-
         private long _leastSigBits;
         private static readonly Random _random = new Random();
+        private static readonly object _randomLock = new object();
 
 
         public UUID(long mostSigBits, long leastSigBits)
@@ -49,7 +49,7 @@
             set { _leastSigBits = value; }
         }
 
-        private UUID(byte[] r)
+        internal UUID(byte[] r)
         {
             MostSignificantBits = 0;
             LeastSignificantBits = 0;
@@ -59,27 +59,33 @@
                 LeastSignificantBits = (LeastSignificantBits << 8) | (r[i] & 
0xff); 
         }
 
-        public static UUID randomUUID()
+        public static UUID RandomUuid()
         {
             byte[] randomBytes = new byte[16];
-            _random.NextBytes(randomBytes);
-            randomBytes[6] &= 0x0f;  
-            randomBytes[6] |= 0x40; 
-            randomBytes[8] &= 0x3f; 
-            randomBytes[8] |= 0x80;           
+            lock (_randomLock)
+            {
+                _random.NextBytes(randomBytes);
+            }
+
+            randomBytes[6] &= 0x0f;
+            randomBytes[6] |= 0x40;
+            randomBytes[8] &= 0x3f;
+            randomBytes[8] |= 0x80;
+
             return new UUID(randomBytes);
         }
+       
 
         public override String ToString()
         {
-            return (digits(_mostSigBits >> 32, 8) + "-" +
-                    digits(_mostSigBits >> 16, 4) + "-" +
-                    digits(_mostSigBits, 4) + "-" +
-                    digits(_leastSigBits >> 48, 4) + "-" +
-                    digits(_leastSigBits, 12));
+            return (Digits(_mostSigBits >> 32, 8) + "-" +
+                    Digits(_mostSigBits >> 16, 4) + "-" +
+                    Digits(_mostSigBits, 4) + "-" +
+                    Digits(_leastSigBits >> 48, 4) + "-" +
+                    Digits(_leastSigBits, 12));
         }
 
-        private static String digits(long val, int digits)
+        private static String Digits(long val, int digits)
         {
             long hi = 1L << (digits * 4);
             return Convert.ToString((hi | (val & (hi - 1))), 16);

Modified: qpid/trunk/qpid/dotnet/client-010/test/transport/util/UUIDTest.cs
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/dotnet/client-010/test/transport/util/UUIDTest.cs?rev=886945&r1=886944&r2=886945&view=diff
==============================================================================
--- qpid/trunk/qpid/dotnet/client-010/test/transport/util/UUIDTest.cs (original)
+++ qpid/trunk/qpid/dotnet/client-010/test/transport/util/UUIDTest.cs Thu Dec  
3 22:12:06 2009
@@ -28,20 +28,22 @@
 
     public class UUIDTest
     {
+
+
         [Test]
         public void createUUID()
         {
-            UUID uuid = UUID.randomUUID();
+            UUID uuid = UUID.RandomUuid();
             String uuidStr = uuid.ToString();
             Assert.IsNotNull(uuid);
-            UUID uuid2 = UUID.randomUUID();
+            UUID uuid2 = UUID.RandomUuid();
             Assert.AreNotSame(uuid, uuid2);
         }
 
         [Test]
         public void ToString_should_override_and_not_hide_base()
         {
-            UUID uuid = UUID.randomUUID();
+            UUID uuid = UUID.RandomUuid();
 
             string uuidStr = uuid.ToString();
             string uuidConcat = "Test." + uuid;
@@ -52,7 +54,7 @@
         [Test]
         public void two_uuid_with_same_value_should_have_same_hash_code()
         {
-            UUID uuid = UUID.randomUUID();
+            UUID uuid = UUID.RandomUuid();
             UUID uuid2 = new UUID(uuid.MostSignificantBits, 
uuid.LeastSignificantBits);
             
             Assert.AreEqual(uuid, uuid2);



---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:commits-subscr...@qpid.apache.org

Reply via email to