From bac27ee7b3bd101bce927c2e13602399ad5756a4 Mon Sep 17 00:00:00 2001 From: Jiwoo Park Date: Sat, 9 Nov 2024 21:45:35 +0900 Subject: [PATCH] Silence TSAN, lock before checking `ares_event_thread::isup` (#915) TSAN is warning about a thread concurrency issue that doesn't actually matter if the operation isn't atomic as its an optimization in this code path to skip timeout processing if we're shutting down due to ares_destroy(). Fix By: Jiwoo Park (@jimmy-park) --- src/lib/ares_event_thread.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/lib/ares_event_thread.c b/src/lib/ares_event_thread.c index 83a015b2..2676dace 100644 --- a/src/lib/ares_event_thread.c +++ b/src/lib/ares_event_thread.c @@ -328,13 +328,15 @@ static void *ares_event_thread(void *arg) e->ev_sys->wait(e, timeout_ms); + /* Relock before we loop again */ + ares_thread_mutex_lock(e->mutex); + /* Each iteration should do timeout processing */ if (e->isup) { + ares_thread_mutex_unlock(e->mutex); ares_process_fd(e->channel, ARES_SOCKET_BAD, ARES_SOCKET_BAD); + ares_thread_mutex_lock(e->mutex); } - - /* Relock before we loop again */ - ares__thread_mutex_lock(e->mutex); } /* Lets cleanup while we're in the thread itself */