From 73b8912580e3ef01c4f00f93c0a6dd39c50e083c Mon Sep 17 00:00:00 2001 From: Stefan Eissing Date: Fri, 16 May 2025 10:38:13 +0200 Subject: [PATCH] asnyc-thrdd: explain how this is okay with a comment Coverity assess correctly that a variable write under mutex lock could overwrite values from another thread - if the function were ever called from multiple thread for the same transfer - which it is not. Closes #17365 --- lib/asyn-thrdd.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/asyn-thrdd.c b/lib/asyn-thrdd.c index a95c736b65..b71bd133da 100644 --- a/lib/asyn-thrdd.c +++ b/lib/asyn-thrdd.c @@ -318,11 +318,15 @@ static void async_thrdd_destroy(struct Curl_easy *data) /* Release our reference to the data shared with the thread. */ Curl_mutex_acquire(&addr->mutx); - thrdd->addr = NULL; --addr->ref_count; CURL_TRC_DNS(data, "resolve, destroy async data, shared ref=%d", addr->ref_count); done = !addr->ref_count; + /* we give up our reference to `addr`, so NULL our pointer. + * coverity analyses this as being a potential unsynched write, + * assuming two calls to this function could be invoked concurrently. + * Which they never are, as the transfer's side runs single-threaded. */ + thrdd->addr = NULL; if(!done) { /* thread is still running. Detach the thread while mutexed, it will * trigger the cleanup when it releases its reference. */ -- 2.47.3