fix:concurrency conflicts occur when obtaining windows system time

This commit is contained in:
facetosea 2022-11-29 21:41:07 +08:00
parent ee97487fe5
commit 81e6a9d906
1 changed files with 20 additions and 11 deletions

View File

@ -551,6 +551,10 @@ int32_t taosClockGetTime(int clock_id, struct timespec *pTS) {
static SYSTEMTIME ss;
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.wMonth = 1;
ss.wDay = 1;
@ -562,6 +566,11 @@ int32_t taosClockGetTime(int clock_id, struct timespec *pTS) {
offset.QuadPart = ff.dwHighDateTime;
offset.QuadPart <<= 32;
offset.QuadPart |= ff.dwLowDateTime;
offsetInitFinished = true;
} else {
while (!offsetInitFinished)
; // Ensure initialization is completed.
}
GetSystemTimeAsFileTime(&f);
t.QuadPart = f.dwHighDateTime;