From f89f3cabe46249d10c21f3b98117ff7953a91dee 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/event/ares_event_thread.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/lib/event/ares_event_thread.c b/src/lib/event/ares_event_thread.c index 24b55d69..d59b7880 100644 --- a/src/lib/event/ares_event_thread.c +++ b/src/lib/event/ares_event_thread.c @@ -354,14 +354,16 @@ static void *ares_event_thread(void *arg) ares_process_pending_write(e->channel); } + /* Relock before we loop again */ + ares_thread_mutex_lock(e->mutex); + /* Each iteration should do timeout processing and any other cleanup * that may not have been performed */ if (e->isup) { + ares_thread_mutex_unlock(e->mutex); ares_process_fds(e->channel, NULL, 0, ARES_PROCESS_FLAG_NONE); + 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 */