From e22adc6c191d2eab86d23dc5d0f76fbccd929323 Mon Sep 17 00:00:00 2001 From: Simon Cruanes Date: Fri, 24 Nov 2023 23:52:17 -0500 Subject: [PATCH] fix: global initialization logic is now hidden behind a mutex --- src/core/Ezcurl_core.ml | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/core/Ezcurl_core.ml b/src/core/Ezcurl_core.ml index 06e6be2..a877698 100644 --- a/src/core/Ezcurl_core.ml +++ b/src/core/Ezcurl_core.ml @@ -71,12 +71,19 @@ end type t = Curl.t let _init = - lazy - (Curl.global_init Curl.CURLINIT_GLOBALALL; - at_exit Curl.global_cleanup) + let initialized = ref false in + let mutex = Mutex.create () in + fun () -> + Mutex.lock mutex; + if not !initialized then ( + initialized := true; + Curl.global_init Curl.CURLINIT_GLOBALALL; + at_exit Curl.global_cleanup + ); + Mutex.unlock mutex let make ?(set_opts = fun _ -> ()) () : t = - Lazy.force _init; + _init (); let c = Curl.init () in Gc.finalise Curl.cleanup c; set_opts c;