From a9d3490f9c3caed1ac12fc3d291b0fc2c6fba6b3 Mon Sep 17 00:00:00 2001 From: John Sully Date: Tue, 17 May 2022 03:49:59 +0000 Subject: [PATCH] Silence TSAN errors on ustime and mstime. Every CPU we support is atomic on aligned ints, but correctness matters --- src/rdb.cpp | 4 +++- src/server.cpp | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/rdb.cpp b/src/rdb.cpp index 73f89e76e..397701abe 100644 --- a/src/rdb.cpp +++ b/src/rdb.cpp @@ -3049,7 +3049,9 @@ void rdbLoadProgressCallback(rio *r, const void *buf, size_t len) { (r->keys_since_last_callback >= g_pserver->loading_process_events_interval_keys))) { rdbAsyncWorkThread *pwthread = reinterpret_cast(r->chksum_arg); - bool fUpdateReplication = (g_pserver->mstime - r->last_update) > 1000; + mstime_t mstime; + __atomic_load(&g_pserver->mstime, &mstime, __ATOMIC_RELAXED); + bool fUpdateReplication = (mstime - r->last_update) > 1000; if (fUpdateReplication) { listIter li; diff --git a/src/server.cpp b/src/server.cpp index 4a7470c8a..a480476e3 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -5534,6 +5534,8 @@ sds genRedisInfoString(const char *section) { } unsigned int lruclock = g_pserver->lruclock.load(); + ustime_t ustime; + __atomic_load(&g_pserver->ustime, &ustime, __ATOMIC_RELAXED); info = sdscatfmt(info, "# Server\r\n" "redis_version:%s\r\n" @@ -5576,7 +5578,7 @@ sds genRedisInfoString(const char *section) { supervised, g_pserver->runid, g_pserver->port ? g_pserver->port : g_pserver->tls_port, - (int64_t)g_pserver->ustime, + (int64_t)ustime, (int64_t)uptime, (int64_t)(uptime/(3600*24)), g_pserver->hz.load(),