summaryrefslogtreecommitdiff
path: root/dotnet
diff options
context:
space:
mode:
authorAidan Skinner <aidan@apache.org>2009-12-03 22:12:06 +0000
committerAidan Skinner <aidan@apache.org>2009-12-03 22:12:06 +0000
commit20b7157f633b68b7eaa1cec07777057210e94663 (patch)
tree526dfb35b1291878905d352334d03b2d22681fb9 /dotnet
parent447b33b63f789135d2a889f95927abc2058f38e0 (diff)
downloadqpid-python-20b7157f633b68b7eaa1cec07777057210e94663.tar.gz
QPID-1972: fix UUID generation.
Patch from julien.lavigne git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@886945 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'dotnet')
-rw-r--r--dotnet/client-010/client/transport/util/UUID.cs34
-rw-r--r--dotnet/client-010/test/transport/util/UUIDTest.cs10
2 files changed, 26 insertions, 18 deletions
diff --git a/dotnet/client-010/client/transport/util/UUID.cs b/dotnet/client-010/client/transport/util/UUID.cs
index 2cbbd460bc..07a3d267a5 100644
--- a/dotnet/client-010/client/transport/util/UUID.cs
+++ b/dotnet/client-010/client/transport/util/UUID.cs
@@ -26,9 +26,9 @@ namespace org.apache.qpid.transport.util
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 @@ namespace org.apache.qpid.transport.util
set { _leastSigBits = value; }
}
- private UUID(byte[] r)
+ internal UUID(byte[] r)
{
MostSignificantBits = 0;
LeastSignificantBits = 0;
@@ -59,27 +59,33 @@ namespace org.apache.qpid.transport.util
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);
diff --git a/dotnet/client-010/test/transport/util/UUIDTest.cs b/dotnet/client-010/test/transport/util/UUIDTest.cs
index c1d460c59f..41104f8873 100644
--- a/dotnet/client-010/test/transport/util/UUIDTest.cs
+++ b/dotnet/client-010/test/transport/util/UUIDTest.cs
@@ -28,20 +28,22 @@ namespace test.transport.util
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 @@ namespace test.transport.util
[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);