Hi,

On Thu, Mar 31, 2022 at 03:19:51PM +0200, Mark Wielaard via curl-library wrote:
> On Thu, Mar 31, 2022 at 04:00:16PM +0300, Catalin Raceanu via curl-library 
> wrote:
> > On 31-Mar-22 15:04, Mark Wielaard wrote:
> > > whether there is a thread-safe way to call
> > > curl_global_init at a later time (to get rid of the library constructor
> > > init function).
> > 
> > I believe that this is an exact fit for C==11's std::call_once(). Boost also
> > has an equivalent, that most likely predates the other, in case older c++
> > standard is used.
> 
> Thanks. Our library is pure C, but we can probably rely on
> pthread_once if it is allowable to call curl_global_init at a later
> time when multiple threads are already running. The reason we aren't
> doing that now is because the curl_global_init documentation
> explicitly states "You must not call it when any other thread in the
> program is running". But maybe we are interpreting the documentation
> too strictly?

Since it does seem we were interpreting the documentation a bit too
strictly I did propose a patch for elfutils that does lazy
initialization using pthread_once.

https://sourceware.org/pipermail/elfutils-devel/2022q2/004934.html

This makes sure we don't race against ourselves. And for programs
using our library we can assume they will call curl_global_init before
creating a multi-threaded environment and calling our own handle
initialization functions.

It would still be great if curl_global_init itself could be made
thread-safe to call.

Thanks,

Mark

Reply via email to