mirror of
https://github.com/c-cube/ezcurl.git
synced 2025-12-06 03:05:31 -05:00
fix: global initialization logic is now hidden behind a mutex
This commit is contained in:
parent
46dc012356
commit
d41eb2ceb4
1 changed files with 11 additions and 4 deletions
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue