make CURLOPT_NOSIGNAL=false the default; simplify
Some checks failed
build / Build (push) Has been cancelled

This commit is contained in:
Simon Cruanes 2025-01-29 21:53:48 -05:00
parent ebf1e1fc12
commit 4b7d9ec769
No known key found for this signature in database
GPG key ID: EBFFF6F283F3A2B4
2 changed files with 21 additions and 21 deletions

View file

@ -71,17 +71,27 @@ end
type t = { curl: Curl.t } [@@unboxed] type t = { curl: Curl.t } [@@unboxed]
type client = t type client = t
let _top_mutex = Mutex.create ()
let _with_mutex f =
Mutex.lock _top_mutex;
match f () with
| res ->
Mutex.unlock _top_mutex;
res
| exception e ->
Mutex.unlock _top_mutex;
raise e
let _init = let _init =
let initialized = ref false in let initialized = ref false in
let mutex = Mutex.create () in
fun () -> fun () ->
Mutex.lock mutex; _with_mutex @@ fun () ->
if not !initialized then ( if not !initialized then (
initialized := true; initialized := true;
Curl.global_init Curl.CURLINIT_GLOBALALL; Curl.global_init Curl.CURLINIT_GLOBALALL;
at_exit Curl.global_cleanup at_exit Curl.global_cleanup
); )
Mutex.unlock mutex
let make ?(set_opts = fun _ -> ()) ?cookiejar_file let make ?(set_opts = fun _ -> ()) ?cookiejar_file
?(enable_session_cookies = false) () : t = ?(enable_session_cookies = false) () : t =
@ -96,21 +106,9 @@ let make ?(set_opts = fun _ -> ()) ?cookiejar_file
{ curl } { curl }
let delete (self : t) = Curl.cleanup self.curl let delete (self : t) = Curl.cleanup self.curl
let _cfg_no_signal = ref false (* default: 0 *)
let _cfg_mutex = Mutex.create () let _get_no_signal () : bool = _with_mutex @@ fun () -> !_cfg_no_signal
let _cfg_no_signal = ref None let set_no_signal v = _with_mutex @@ fun () -> _cfg_no_signal := v
let _get_no_signal () =
Mutex.lock _cfg_mutex;
let v = !_cfg_no_signal in
Mutex.unlock _cfg_mutex;
v
let set_no_signal v =
Mutex.lock _cfg_mutex;
_cfg_no_signal := Some v;
Mutex.unlock _cfg_mutex;
()
module Cookies = struct module Cookies = struct
let reload_cookiejar (self : t) : unit = let reload_cookiejar (self : t) : unit =
@ -146,7 +144,7 @@ let _apply_config (self : t) (config : Config.t) : unit =
opt_iter authmethod ~f:(Curl.set_httpauth self.curl); opt_iter authmethod ~f:(Curl.set_httpauth self.curl);
opt_iter username ~f:(Curl.set_username self.curl); opt_iter username ~f:(Curl.set_username self.curl);
opt_iter password ~f:(Curl.set_password self.curl); opt_iter password ~f:(Curl.set_password self.curl);
opt_iter (_get_no_signal ()) ~f:(Curl.set_nosignal self); Curl.set_nosignal self.curl (_get_no_signal ());
() ()
let _set_headers (self : t) (headers : _ list) : unit = let _set_headers (self : t) (headers : _ list) : unit =

View file

@ -38,7 +38,9 @@ val with_client : ?set_opts:(Curl.t -> unit) -> (t -> 'a) -> 'a
(** Make a temporary client, call the function with it, then cleanup. *) (** Make a temporary client, call the function with it, then cleanup. *)
val set_no_signal : bool -> unit val set_no_signal : bool -> unit
(** Set no_signal default value for each new client instance *) (** Set no_signal default value for each new client instance. Default is [true].
See [CURLOPT_NOSIGNAL].
@since NEXT_RELEASE *)
(** Cookie handling. (** Cookie handling.