From 81b1f7d29b4c1d582e03ed03da741d85558d31a8 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 4a942b18..f90cb706 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 */