From: Stefan Eissing Date: Fri, 14 Nov 2025 11:51:31 +0000 (+0100) Subject: examples/multithread: fix race condition X-Git-Tag: rc-8_18_0-1~300 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=971e8d661c68ce8859885c3ae865ff9441b62f0e;p=thirdparty%2Fcurl.git examples/multithread: fix race condition Reported-by: Nick Korepanov Fixes #19524 Closes #19526 --- diff --git a/docs/examples/multithread.c b/docs/examples/multithread.c index 36836ef475..3ecca25908 100644 --- a/docs/examples/multithread.c +++ b/docs/examples/multithread.c @@ -50,14 +50,19 @@ static const char * const urls[NUMT]= { "www.example" }; -static void *pull_one_url(void *pindex) +struct targ { + const char *url; +}; + + +static void *pull_one_url(void *p) { CURL *curl; + struct targ *targ = p; curl = curl_easy_init(); if(curl) { - int i = *(int *)pindex; - curl_easy_setopt(curl, CURLOPT_URL, urls[i]); + curl_easy_setopt(curl, CURLOPT_URL, targ->url); (void)curl_easy_perform(curl); /* ignores error */ curl_easy_cleanup(curl); } @@ -76,6 +81,7 @@ int main(void) { CURLcode res; pthread_t tid[NUMT]; + struct targ targs[NUMT]; int i; /* Must initialize libcurl before any threads are started */ @@ -84,10 +90,12 @@ int main(void) return (int)res; for(i = 0; i < NUMT; i++) { - int error = pthread_create(&tid[i], - NULL, /* default attributes please */ - pull_one_url, - (void *)&i); + int error; + targs[i].url = urls[i]; + error = pthread_create(&tid[i], + NULL, /* default attributes please */ + pull_one_url, + (void *)&targs[i]); if(error) fprintf(stderr, "Couldn't run thread number %d, errno %d\n", i, error); else