Browse Source

fix tsan: utiltime race on nMockTime

0.15
Pieter Wuille 8 years ago
parent
commit
1d31093d4d
  1. 12
      src/utiltime.cpp

12
src/utiltime.cpp

@ -9,14 +9,17 @@ @@ -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() @@ -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() @@ -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();
}

Loading…
Cancel
Save