From: Stefan Eissing Date: Fri, 16 May 2025 08:38:13 +0000 (+0200) Subject: asnyc-thrdd: explain how this is okay with a comment X-Git-Tag: curl-8_14_0~68 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=73b8912580e3ef01c4f00f93c0a6dd39c50e083c;p=thirdparty%2Fcurl.git 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 --- 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. */