mirror of
https://github.com/curl/curl.git
synced 2026-08-25 03:43:31 +03:00
examples/multithread: fix race condition
Reported-by: Nick Korepanov Fixes #19524 Closes #19526
This commit is contained in:
parent
5f4cd4c689
commit
971e8d661c
1 changed files with 15 additions and 7 deletions
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue