fix:concurrency conflicts occur when obtaining windows system time
This commit is contained in:
parent
ee97487fe5
commit
81e6a9d906
|
@ -551,6 +551,10 @@ int32_t taosClockGetTime(int clock_id, struct timespec *pTS) {
|
||||||
static SYSTEMTIME ss;
|
static SYSTEMTIME ss;
|
||||||
static LARGE_INTEGER offset;
|
static LARGE_INTEGER offset;
|
||||||
|
|
||||||
|
static int8_t offsetInit = 0;
|
||||||
|
static volatile bool offsetInitFinished = false;
|
||||||
|
int8_t old = atomic_val_compare_exchange_8(&offsetInit, 0, 1);
|
||||||
|
if (0 == old) {
|
||||||
ss.wYear = 1970;
|
ss.wYear = 1970;
|
||||||
ss.wMonth = 1;
|
ss.wMonth = 1;
|
||||||
ss.wDay = 1;
|
ss.wDay = 1;
|
||||||
|
@ -562,6 +566,11 @@ int32_t taosClockGetTime(int clock_id, struct timespec *pTS) {
|
||||||
offset.QuadPart = ff.dwHighDateTime;
|
offset.QuadPart = ff.dwHighDateTime;
|
||||||
offset.QuadPart <<= 32;
|
offset.QuadPart <<= 32;
|
||||||
offset.QuadPart |= ff.dwLowDateTime;
|
offset.QuadPart |= ff.dwLowDateTime;
|
||||||
|
offsetInitFinished = true;
|
||||||
|
} else {
|
||||||
|
while (!offsetInitFinished)
|
||||||
|
; // Ensure initialization is completed.
|
||||||
|
}
|
||||||
|
|
||||||
GetSystemTimeAsFileTime(&f);
|
GetSystemTimeAsFileTime(&f);
|
||||||
t.QuadPart = f.dwHighDateTime;
|
t.QuadPart = f.dwHighDateTime;
|
||||||
|
|
Loading…
Reference in New Issue