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:[email protected]