On Thu, Sep 21, 2023 at 12:08:33PM -0400, Anass Meskini via curl-library wrote:
> Thanks Dan for the clarification. 
> I think it might be worth mentioning in the doc that this function might 
> create
> a thread.

It is called the "threaded resolver" after all, and that name is found in 8
different documentation files in the source tree, including in
libcurl-thread(3) which is the go-to location for information about threading
in libcurl. Where else would you like to see it? curl_multi_perform(3) seems
like a poor place for it, because *absolutely everything* happens in a call to 
curl_multi_perform and we can't document everything there.

> Would setting CURLOPT_RESOLVE result in curl_multi_perform never creating a 
> new
> thread?

I'm pretty sure that the name resolve cache is checked before the system
resolver thread is created, so this should work.

> Also when I run multi-app.c in helgrind, I see:
> 
>     ==339231== 
> ---Thread-Announcement------------------------------------------
>     ==339231==
>     ==339231== Thread #1 is the program's root thread
>     ==339231==
>     ==339231== 
> ----------------------------------------------------------------
>     ==339231==
>     ==339231== Thread #1: pthread_mutex_destroy with invalid argument
>     ==339231==    at 0x483FC96: ??? (in /usr/lib/x86_64-linux-gnu/valgrind/
>     vgpreload_helgrind-amd64-linux.so)
>     ==339231==    by 0x572D16F: ??? (in /usr/lib/x86_64-linux-gnu/
>     libp11-kit.so.0.3.0)
>     ==339231==    by 0x4011F6A: _dl_fini (dl-fini.c:138)
>     ==339231==    by 0x49468A6: __run_exit_handlers (exit.c:108)
>     ==339231==    by 0x4946A5F: exit (exit.c:139)
>     ==339231==    by 0x4924089: (below main) (libc-start.c:342)
>     ==339231==
>     ==339231== 
> ----------------------------------------------------------------
>     ==339231==
>     ==339231== Thread #1: pthread_mutex_destroy with invalid argument
>     ==339231==    at 0x483FC96: ??? (in /usr/lib/x86_64-linux-gnu/valgrind/
>     vgpreload_helgrind-amd64-linux.so)
>     ==339231==    by 0x4011F6A: _dl_fini (dl-fini.c:138)
>     ==339231==    by 0x49468A6: __run_exit_handlers (exit.c:108)
>     ==339231==    by 0x4946A5F: exit (exit.c:139)
>     ==339231==    by 0x4924089: (below main) (libc-start.c:342)
> 
> 
> Are these false positives?

Not that I'm aware. Note that libcurl uses pthread mutexes aside from
threading, so these a not (necessarily) related to the threaded resolver. Other
libraries like OpenSSL, GnuTLS and libssh also uses mutexes, so this might not
ever be an issue in libcurl.

Dan
-- 
Unsubscribe: https://lists.haxx.se/mailman/listinfo/curl-library
Etiquette:   https://curl.se/mail/etiquette.html

Reply via email to