diff options
| author | Pieter Wuille <[email protected]> | 2017-02-11 12:37:05 -0800 |
|---|---|---|
| committer | Pieter Wuille <[email protected]> | 2017-04-20 06:25:15 -0700 |
| commit | 1d31093d4d8501a5dc031413a963707f6cae0e0a (patch) | |
| tree | 70eaa76b30a28540db0f93eace4e49a742c8ad07 /src | |
| parent | fix ubsan: bitcoin-tx: not initialize context before IsFullyValid (diff) | |
| download | discoin-1d31093d4d8501a5dc031413a963707f6cae0e0a.tar.xz discoin-1d31093d4d8501a5dc031413a963707f6cae0e0a.zip | |
fix tsan: utiltime race on nMockTime
Diffstat (limited to 'src')
| -rw-r--r-- | src/utiltime.cpp | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/src/utiltime.cpp b/src/utiltime.cpp index a9936a645..510f540b1 100644 --- a/src/utiltime.cpp +++ b/src/utiltime.cpp @@ -9,14 +9,17 @@ #include "utiltime.h" +#include <atomic> + #include <boost/date_time/posix_time/posix_time.hpp> #include <boost/thread.hpp> -static int64_t nMockTime = 0; //!< For unit testing +static std::atomic<int64_t> nMockTime(0); //!< For unit testing int64_t GetTime() { - if (nMockTime) return nMockTime; + int64_t mocktime = nMockTime.load(std::memory_order_relaxed); + if (mocktime) return mocktime; time_t now = time(NULL); assert(now > 0); @@ -25,7 +28,7 @@ int64_t GetTime() void SetMockTime(int64_t nMockTimeIn) { - nMockTime = nMockTimeIn; + nMockTime.store(nMockTimeIn, std::memory_order_relaxed); } int64_t GetTimeMillis() @@ -52,7 +55,8 @@ int64_t GetSystemTimeInSeconds() /** Return a time useful for the debug log */ int64_t GetLogTimeMicros() { - if (nMockTime) return nMockTime*1000000; + int64_t mocktime = nMockTime.load(std::memory_order_relaxed); + if (mocktime) return mocktime*1000000; return GetTimeMicros(); } |