diff options
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); |