From b9f05378abe6e96249199fd9ba8e8572665661ea Mon Sep 17 00:00:00 2001 From: Austin Drefke Date: Fri, 26 Jul 2019 10:42:13 -0700 Subject: [PATCH] allow LogData to be called in multi threaded environment --- src/HyperLogLog.net/HyperLogLog.net/HyperLogLog.cs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/HyperLogLog.net/HyperLogLog.net/HyperLogLog.cs b/src/HyperLogLog.net/HyperLogLog.net/HyperLogLog.cs index 242cbe2..063b47c 100644 --- a/src/HyperLogLog.net/HyperLogLog.net/HyperLogLog.cs +++ b/src/HyperLogLog.net/HyperLogLog.net/HyperLogLog.cs @@ -9,6 +9,7 @@ public class HyperLogLog internal readonly byte[] _registers; private readonly HashAlgorithm _hashAlgorithm; private readonly IBytesConverter _bytesConverter; + private readonly object _hashLock = new object(); #region Constants @@ -108,7 +109,12 @@ private double FastPow2(int x) private ulong GetHash(object data) { var dataBytes = _bytesConverter.GetBytes(data); - var hashBytes = _hashAlgorithm.ComputeHash(dataBytes); + var hashBytes = new byte[0]; + + lock (_hashLock) + { + hashBytes = _hashAlgorithm.ComputeHash(dataBytes); + } // XORing the hash into 64bits sections is not required - we can just take the first 64 bits //ulong hash = 0;