diff options
author | Aidan Skinner <aidan@apache.org> | 2009-12-03 22:12:06 +0000 |
---|---|---|
committer | Aidan Skinner <aidan@apache.org> | 2009-12-03 22:12:06 +0000 |
commit | 20b7157f633b68b7eaa1cec07777057210e94663 (patch) | |
tree | 526dfb35b1291878905d352334d03b2d22681fb9 /dotnet | |
parent | 447b33b63f789135d2a889f95927abc2058f38e0 (diff) | |
download | qpid-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.cs | 34 | ||||
-rw-r--r-- | dotnet/client-010/test/transport/util/UUIDTest.cs | 10 |
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); |