Skip to content

Commit e39d447

Browse files
more engine compat
1 parent b88f069 commit e39d447

File tree

2 files changed

+19
-0
lines changed

2 files changed

+19
-0
lines changed

src/unix/lwt_engine.ml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,14 @@ let _fake_event = {
3838
let fake_event = ref _fake_event
3939

4040
type engine_id = ..
41+
type engine_id += Engine_id__other
4142

4243
(* +-----------------------------------------------------------------+
4344
| Engines |
4445
+-----------------------------------------------------------------+ *)
4546

4647
class virtual abstract = object(self)
48+
method id = Engine_id__other
4749
method virtual iter : bool -> unit
4850
method virtual private cleanup : unit
4951
method virtual private register_readable : Unix.file_descr -> (unit -> unit) -> unit Lazy.t
@@ -174,9 +176,12 @@ external ev_io_stop : ev_loop -> ev_io -> unit = "lwt_libev_io_stop"
174176
external ev_timer_init : ev_loop -> float -> bool -> (unit -> unit) -> ev_timer = "lwt_libev_timer_init"
175177
external ev_timer_stop : ev_loop -> ev_timer -> unit = "lwt_libev_timer_stop"
176178

179+
type engine_id += Engine_id__libev of Ev_backend.t
177180
class libev ?(backend=Ev_backend.default) () = object
178181
inherit abstract
179182

183+
method! id = Engine_id__libev backend
184+
180185
val loop = ev_init backend
181186
method loop = loop
182187

@@ -332,9 +337,12 @@ class virtual select_or_poll_based = object
332337
if Lwt_sequence.is_empty actions then wait_writable <- Fd_map.remove fd wait_writable)
333338
end
334339

340+
type engine_id += Engine_id__select
335341
class virtual select_based = object(self)
336342
inherit select_or_poll_based
337343

344+
method! id = Engine_id__select
345+
338346
method private virtual select : Unix.file_descr list -> Unix.file_descr list -> float -> Unix.file_descr list * Unix.file_descr list
339347

340348
method iter block =
@@ -367,9 +375,12 @@ class virtual select_based = object(self)
367375
List.iter (fun fd -> invoke_actions fd wait_writable) fds_w
368376
end
369377

378+
type engine_id += Engine_id__poll
370379
class virtual poll_based = object(self)
371380
inherit select_or_poll_based
372381

382+
method! id = Engine_id__select
383+
373384
method private virtual poll : (Unix.file_descr * bool * bool) list -> float -> (Unix.file_descr * bool * bool) list
374385

375386
method iter block =
@@ -431,6 +442,7 @@ let set ?(transfer=true) ?(destroy=true) engine =
431442
if destroy then !current#destroy;
432443
current := (engine : #t :> t)
433444

445+
let id () = !current#id
434446
let iter block = !current#iter block
435447
let on_readable fd f = !current#on_readable fd f
436448
let on_writable fd f = !current#on_writable fd f

src/unix/lwt_engine.mli

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,11 @@ val forwards_signal : int -> bool
6767

6868
type engine_id = ..
6969

70+
val id : unit -> engine_id
71+
7072
(** Abstract class for engines. *)
7173
class virtual abstract : object
74+
method id : engine_id
7275
method destroy : unit
7376
(** Destroy the engine, remove all its events and free its
7477
associated resources. *)
@@ -144,6 +147,8 @@ end
144147

145148
(** Type of libev loops. *)
146149

150+
type engine_id += Engine_id__libev of Ev_backend.t
151+
147152
(** Engine based on libev. If not compiled with libev support, the
148153
creation of the class will raise {!Lwt_sys.Not_available}. *)
149154
class libev : ?backend:Ev_backend.t -> unit -> object
@@ -160,6 +165,8 @@ class libev : ?backend:Ev_backend.t -> unit -> object
160165
end
161166

162167
(** Engine based on {!Unix.select}. *)
168+
type engine_id += Engine_id__select
169+
type engine_id += Engine_id__poll
163170
class select : t
164171

165172
(** Abstract class for engines based on a select-like function. *)

0 commit comments

Comments
 (0)