mirror of
https://github.com/c-cube/nanoev.git
synced 2025-12-05 19:00:35 -05:00
Compare commits
5 commits
a14280c1a8
...
9d0a5dbf17
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9d0a5dbf17 | ||
|
|
d5f25ddf6f | ||
|
|
41ede7fb33 | ||
|
|
9cfee024cd | ||
|
|
b96a78cfc0 |
8 changed files with 38 additions and 27 deletions
6
.github/workflows/gh-pages.yml
vendored
6
.github/workflows/gh-pages.yml
vendored
|
|
@ -22,9 +22,11 @@ jobs:
|
||||||
# temporary until it's in a release
|
# temporary until it's in a release
|
||||||
- run: opam pin picos 0.6.0 -y -n
|
- run: opam pin picos 0.6.0 -y -n
|
||||||
|
|
||||||
- run: opam install picos moonpool trace
|
- run: opam install odig moonpool trace
|
||||||
|
- run: opam pin . -y -n
|
||||||
|
- run: opam install . --deps-only
|
||||||
|
|
||||||
- run: opam exec -- odig odoc --cache-dir=_doc/ nanoev
|
- run: opam exec -- odig odoc --cache-dir=_doc/ nanoev nanoev-picos nanoev-posix nanoev_tiny_httpd
|
||||||
|
|
||||||
- name: Deploy
|
- name: Deploy
|
||||||
uses: peaceiris/actions-gh-pages@v3
|
uses: peaceiris/actions-gh-pages@v3
|
||||||
|
|
|
||||||
|
|
@ -28,4 +28,7 @@ let () =
|
||||||
## Backends
|
## Backends
|
||||||
|
|
||||||
- [x] select
|
- [x] select
|
||||||
|
- [x] poll/ppoll
|
||||||
|
- [ ] epoll
|
||||||
|
- [ ] kqueue
|
||||||
- [ ] uring
|
- [ ] uring
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
let is_setup = Global_.has_bg_thread
|
let is_setup = Global_ev.has_bg_thread
|
||||||
let setup = Global_.setup_bg_thread
|
let setup = Global_ev.setup_bg_thread
|
||||||
let shutdown = Global_.shutdown_bg_thread
|
let shutdown = Global_ev.shutdown_bg_thread
|
||||||
|
|
||||||
let with_setup ev f =
|
let with_setup ev f =
|
||||||
setup ev;
|
setup ev;
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,6 @@
|
||||||
open Common_
|
open Common_
|
||||||
|
|
||||||
let[@inline] get_loop_exn_ () : Nanoev.t =
|
let get_loop_exn_ : unit -> Nanoev.t = Global_ev.get_nanoev_exn
|
||||||
match Atomic.get Global_.st with
|
|
||||||
| None -> failwith "No nanoev loop installed."
|
|
||||||
| Some st -> st.nanoev
|
|
||||||
|
|
||||||
let[@inline] unwrap_ = function
|
let[@inline] unwrap_ = function
|
||||||
| None -> ()
|
| None -> ()
|
||||||
|
|
@ -85,9 +82,7 @@ let rec write fd buf i len =
|
||||||
let connect fd addr = retry_write_ fd (fun () -> Unix.connect fd addr)
|
let connect fd addr = retry_write_ fd (fun () -> Unix.connect fd addr)
|
||||||
|
|
||||||
let[@inline] max_fds () =
|
let[@inline] max_fds () =
|
||||||
match Atomic.get Global_.st with
|
Option.fold ~none:1024 ~some:Nanoev.max_fds @@ Global_ev.get_nanoev ()
|
||||||
| None -> 1024
|
|
||||||
| Some st -> Nanoev.max_fds st.nanoev
|
|
||||||
|
|
||||||
let sleep t =
|
let sleep t =
|
||||||
if t > 0. then (
|
if t > 0. then (
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,19 @@
|
||||||
|
(** Global loop. *)
|
||||||
|
|
||||||
open Common_
|
open Common_
|
||||||
|
|
||||||
type st =
|
open struct
|
||||||
| None
|
type st =
|
||||||
| Some of {
|
| None
|
||||||
active: bool Atomic.t;
|
| Some of {
|
||||||
nanoev: Nanoev.t;
|
active: bool Atomic.t;
|
||||||
th: Thread.t;
|
nanoev: Nanoev.t;
|
||||||
}
|
th: Thread.t;
|
||||||
|
}
|
||||||
|
|
||||||
let st : st Atomic.t = Atomic.make None
|
let st : st Atomic.t = Atomic.make None
|
||||||
let lock = Mutex.create ()
|
let lock = Mutex.create ()
|
||||||
|
end
|
||||||
|
|
||||||
let with_lock lock f =
|
let with_lock lock f =
|
||||||
Mutex.lock lock;
|
Mutex.lock lock;
|
||||||
|
|
@ -27,6 +31,16 @@ let bg_thread_ ~active ~evloop () : unit =
|
||||||
Nanoev.step evloop
|
Nanoev.step evloop
|
||||||
done
|
done
|
||||||
|
|
||||||
|
let[@inline] get_nanoev () : Nanoev.t option =
|
||||||
|
match Atomic.get st with
|
||||||
|
| None -> None
|
||||||
|
| Some st -> Some st.nanoev
|
||||||
|
|
||||||
|
let[@inline] get_nanoev_exn () : Nanoev.t =
|
||||||
|
match Atomic.get st with
|
||||||
|
| None -> failwith "No nanoev loop installed in nanoev_picos"
|
||||||
|
| Some st -> st.nanoev
|
||||||
|
|
||||||
let[@inline] has_bg_thread () = Atomic.get st <> None
|
let[@inline] has_bg_thread () = Atomic.get st <> None
|
||||||
|
|
||||||
let setup_bg_thread (ev : Nanoev.t) : unit =
|
let setup_bg_thread (ev : Nanoev.t) : unit =
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
module Background_thread = Background_thread
|
module Background_thread = Background_thread
|
||||||
module Base = Base
|
module Base = Base
|
||||||
include Base
|
include Base
|
||||||
|
module Global_ev = Global_ev
|
||||||
module IO_in = IO_in
|
module IO_in = IO_in
|
||||||
module IO_out = IO_out
|
module IO_out = IO_out
|
||||||
module Net_client = Net_client
|
module Net_client = Net_client
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
(** Basic interface with picos *)
|
(** Basic interface with picos *)
|
||||||
|
|
||||||
module Background_thread = Background_thread
|
module Background_thread = Background_thread
|
||||||
|
module Global_ev = Global_ev
|
||||||
|
|
||||||
(** {2 Non blocking IO primitives} *)
|
(** {2 Non blocking IO primitives} *)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -60,12 +60,7 @@ end
|
||||||
|
|
||||||
let establish ?backlog ?max_connections ?(exn_handler = default_exn_handler)
|
let establish ?backlog ?max_connections ?(exn_handler = default_exn_handler)
|
||||||
~spawn ~(client_handler : client_handler) addr : t =
|
~spawn ~(client_handler : client_handler) addr : t =
|
||||||
let ev =
|
let ev = Global_ev.get_nanoev_exn () in
|
||||||
match Atomic.get Global_.st with
|
|
||||||
| Some { nanoev = ev; _ } -> ev
|
|
||||||
| None -> invalid_arg "Nanoev_picos.Net_server: no event loop installed"
|
|
||||||
in
|
|
||||||
|
|
||||||
let max_connections =
|
let max_connections =
|
||||||
match max_connections with
|
match max_connections with
|
||||||
| None -> Nanoev.max_fds ev
|
| None -> Nanoev.max_fds ev
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue