fix: global initialization logic is now hidden behind a mutex

This commit is contained in:
Simon Cruanes 2023-11-24 23:52:17 -05:00
parent 46dc012356
commit d41eb2ceb4

View file

@ -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;