Compare commits

..

No commits in common. "00c845ec8d4764557de28d8606c0b21edfb5841a" and "9d0a5dbf17d8365f24fd8774b81ae2af86ca6418" have entirely different histories.

7 changed files with 15 additions and 42 deletions

View file

@ -25,7 +25,6 @@ jobs:
- run: opam install odig moonpool trace - run: opam install odig moonpool trace
- run: opam pin . -y -n - run: opam pin . -y -n
- run: opam install . --deps-only - run: opam install . --deps-only
- run: opam install .
- run: opam exec -- odig odoc --cache-dir=_doc/ nanoev nanoev-picos nanoev-posix nanoev_tiny_httpd - run: opam exec -- odig odoc --cache-dir=_doc/ nanoev nanoev-picos nanoev-posix nanoev_tiny_httpd

View file

@ -76,7 +76,7 @@
picos picos
picos_std picos_std
(tiny_httpd (tiny_httpd
(>= 0.19))) (>= 0.17)))
(tags (tags
(nanoev http))) (nanoev http)))

View file

@ -14,7 +14,7 @@ depends: [
"nanoev-picos" {= version} "nanoev-picos" {= version}
"picos" "picos"
"picos_std" "picos_std"
"tiny_httpd" {>= "0.19"} "tiny_httpd" {>= "0.17"}
"odoc" {with-doc} "odoc" {with-doc}
] ]
build: [ build: [

View file

@ -1,18 +1,12 @@
open Common_ open Common_
let get_loop_exn_ : unit -> Nanoev.t = Global_ev.get_nanoev_exn let get_loop_exn_ : unit -> Nanoev.t = Global_ev.get_nanoev_exn
let[@inline] check_fiber_ () : unit = Picos.Fiber.(check @@ current ())
let[@inline] unwrap_ = function let[@inline] unwrap_ = function
| None -> () | None -> ()
| Some (exn, bt) -> Printexc.raise_with_backtrace exn bt | Some (exn, bt) -> Printexc.raise_with_backtrace exn bt
let[@inline] on_readable_ fd x y f : unit =
let ev = get_loop_exn_ () in
Nanoev.on_readable ev fd x y f
let[@unroll 1] rec retry_read_ fd f = let[@unroll 1] rec retry_read_ fd f =
check_fiber_ ();
match f () with match f () with
| res -> res | res -> res
| exception | exception
@ -24,19 +18,15 @@ let[@unroll 1] rec retry_read_ fd f =
(* Trace_.message "read must wait"; *) (* Trace_.message "read must wait"; *)
let trigger = Picos.Trigger.create () in let trigger = Picos.Trigger.create () in
let closed_r = ref false in let closed_r = ref false in
on_readable_ fd trigger closed_r (fun ~closed trigger closed_r -> let ev = get_loop_exn_ () in
Nanoev.on_readable ev fd trigger closed_r (fun ~closed trigger closed_r ->
closed_r := closed; closed_r := closed;
Picos.Trigger.signal trigger); Picos.Trigger.signal trigger);
Picos.Trigger.await trigger |> unwrap_; Picos.Trigger.await trigger |> unwrap_;
if !closed_r then raise Closed; if !closed_r then raise Closed;
retry_read_ fd f retry_read_ fd f
let[@inline] on_writable_ fd x y f : unit =
let ev = get_loop_exn_ () in
Nanoev.on_writable ev fd x y f
let[@unroll 1] rec retry_write_ fd f = let[@unroll 1] rec retry_write_ fd f =
check_fiber_ ();
match f () with match f () with
| res -> res | res -> res
| exception | exception
@ -46,9 +36,10 @@ let[@unroll 1] rec retry_write_ fd f =
_, _,
_ ) -> _ ) ->
(* Trace_.message "write must wait"; *) (* Trace_.message "write must wait"; *)
let ev = get_loop_exn_ () in
let trigger = Picos.Trigger.create () in let trigger = Picos.Trigger.create () in
let closed_r = ref false in let closed_r = ref false in
on_writable_ fd trigger closed_r (fun ~closed trigger closed_r -> Nanoev.on_writable ev fd trigger closed_r (fun ~closed trigger closed_r ->
closed_r := closed; closed_r := closed;
Picos.Trigger.signal trigger); Picos.Trigger.signal trigger);
Picos.Trigger.await trigger |> unwrap_; Picos.Trigger.await trigger |> unwrap_;
@ -93,22 +84,16 @@ let connect fd addr = retry_write_ fd (fun () -> Unix.connect fd addr)
let[@inline] max_fds () = let[@inline] max_fds () =
Option.fold ~none:1024 ~some:Nanoev.max_fds @@ Global_ev.get_nanoev () Option.fold ~none:1024 ~some:Nanoev.max_fds @@ Global_ev.get_nanoev ()
let run_after_s_ t x y f : unit =
let ev = get_loop_exn_ () in
Nanoev.run_after_s ev t x y f
let sleep t = let sleep t =
if t > 0. then ( if t > 0. then (
let ev = get_loop_exn_ () in
let trigger = Picos.Trigger.create () in let trigger = Picos.Trigger.create () in
run_after_s_ t trigger () (fun trigger () -> Picos.Trigger.signal trigger); Nanoev.run_after_s ev t trigger () (fun trigger () ->
Picos.Trigger.await trigger |> unwrap_; Picos.Trigger.signal trigger);
check_fiber_ () Picos.Trigger.await trigger |> unwrap_
) )
module Raw = struct module Raw = struct
let run_after_s = run_after_s_
let on_readable = on_readable_
let on_writable = on_writable_
let retry_read = retry_read_ let retry_read = retry_read_
let retry_write = retry_write_ let retry_write = retry_write_
end end

View file

@ -32,14 +32,6 @@ val sleep : float -> unit
(** Suspend current fiber for [n] seconds *) (** Suspend current fiber for [n] seconds *)
module Raw : sig module Raw : sig
val run_after_s : float -> 'a -> 'b -> ('a -> 'b -> unit) -> unit
val on_writable :
Unix.file_descr -> 'a -> 'b -> (closed:bool -> 'a -> 'b -> unit) -> unit
val on_readable :
Unix.file_descr -> 'a -> 'b -> (closed:bool -> 'a -> 'b -> unit) -> unit
val retry_read : Unix.file_descr -> (unit -> 'a) -> 'a val retry_read : Unix.file_descr -> (unit -> 'a) -> 'a
val retry_write : Unix.file_descr -> (unit -> 'a) -> 'a val retry_write : Unix.file_descr -> (unit -> 'a) -> 'a
end end

View file

@ -259,10 +259,10 @@ open struct
slice.len <- 0 slice.len <- 0
end end
let create ?enable_logging ?(masksigpipe = not Sys.win32) ?max_connections let create ?(masksigpipe = not Sys.win32) ?max_connections ?max_buf_pool_size
?max_buf_pool_size ?(timeout = 0.0) ?buf_size ?(timeout = 0.0) ?buf_size ?(get_time_s = Unix.gettimeofday)
?(get_time_s = Unix.gettimeofday) ?(addr = "127.0.0.1") ?(port = 8080) ?sock ?(addr = "127.0.0.1") ?(port = 8080) ?sock ?middlewares ~new_thread () :
?head_middlewares ?middlewares ~new_thread () : TH.Server.t = TH.Server.t =
let max_connections = get_max_connection_ ?max_connections () in let max_connections = get_max_connection_ ?max_connections () in
let max_pool_size = let max_pool_size =
match max_buf_pool_size with match max_buf_pool_size with
@ -300,5 +300,4 @@ let create ?enable_logging ?(masksigpipe = not Sys.win32) ?max_connections
let tcp_server () = tcp_server_builder let tcp_server () = tcp_server_builder
end in end in
let backend = (module B : TH.Server.IO_BACKEND) in let backend = (module B : TH.Server.IO_BACKEND) in
TH.Server.create_from ?enable_logging ?buf_size ?head_middlewares ?middlewares TH.Server.create_from ?buf_size ?middlewares ~backend ()
~backend ()

View file

@ -1,7 +1,6 @@
module TH = Tiny_httpd_core module TH = Tiny_httpd_core
val create : val create :
?enable_logging:bool ->
?masksigpipe:bool -> ?masksigpipe:bool ->
?max_connections:int -> ?max_connections:int ->
?max_buf_pool_size:int -> ?max_buf_pool_size:int ->
@ -11,7 +10,6 @@ val create :
?addr:string -> ?addr:string ->
?port:int -> ?port:int ->
?sock:Unix.file_descr -> ?sock:Unix.file_descr ->
?head_middlewares:TH.Server.Head_middleware.t list ->
?middlewares:([ `Encoding | `Stage of int ] * TH.Server.Middleware.t) list -> ?middlewares:([ `Encoding | `Stage of int ] * TH.Server.Middleware.t) list ->
new_thread:((unit -> unit) -> unit) -> new_thread:((unit -> unit) -> unit) ->
unit -> unit ->