← Commit list

971e8d661c

Stefan Eissing
Stefan Eissing
2025-11-14
SUCCESS Duration: 151s

Subject

examples/multithread: fix race condition

Binary

No binary (build failed)

Architecture & Compiler Flags

Architecture: x86_64-linux-gnu Compiler: gcc (Ubuntu 11.4.0-1ubuntu1~22.04.3) 11.4.0

—

Build Log

(log yok)

Commit Diff GitHub →

docs/examples/multithread.c+15 -7
@@ -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