@@ -2201,18 +2201,20 @@ external init_notification : Domain.id -> Unix.file_descr = "lwt_unix_init_notif
2201
2201
external send_notification : Domain .id -> int -> unit = " lwt_unix_send_notification_stub"
2202
2202
external recv_notifications : Domain .id -> int array = " lwt_unix_recv_notifications_stub"
2203
2203
2204
- let handle_notifications domain_id (_ : Lwt_engine.event ) =
2204
+ let handle_notifications (_ : Lwt_engine.event ) =
2205
+ let domain_id = Domain. self () in
2205
2206
Array. iter (call_notification domain_id) (recv_notifications domain_id)
2206
2207
2207
- let event_notifications = Domain_map. create_protected_map ()
2208
+ let event_notifications =
2209
+ Domain.DLS. new_key (fun () ->
2210
+ let domain_id = Domain. self () in
2211
+ Lwt_engine. on_readable (init_notification domain_id) handle_notifications
2212
+ )
2208
2213
2209
2214
let init_domain () =
2210
2215
let domain_id = Domain. self () in
2211
2216
let _ : notifier Notifiers.t = (Domain_map. init notifiers domain_id (fun () -> Notifiers. create 1024 )) in
2212
- let _ : Lwt_engine.event = Domain_map. init event_notifications domain_id (fun () ->
2213
- let eventfd = init_notification domain_id in
2214
- Lwt_engine. on_readable eventfd (handle_notifications domain_id))
2215
- in
2217
+ let _ : Lwt_engine.event = Domain.DLS. get event_notifications in
2216
2218
()
2217
2219
2218
2220
(* +-----------------------------------------------------------------+
@@ -2316,12 +2318,9 @@ let fork () =
2316
2318
reset_after_fork () ;
2317
2319
(* Stop the old event for notifications. *)
2318
2320
let domain_id = Domain. self () in
2319
- (match Domain_map. find event_notifications domain_id with
2320
- | Some event -> Lwt_engine. stop_event event
2321
- | None -> () );
2321
+ Lwt_engine. stop_event (Domain.DLS. get event_notifications);
2322
2322
(* Reinitialise the notification system. *)
2323
- let new_event = Lwt_engine. on_readable (init_notification domain_id) (handle_notifications domain_id) in
2324
- Domain_map. add event_notifications domain_id new_event;
2323
+ Domain.DLS. set event_notifications (Lwt_engine. on_readable (init_notification domain_id) handle_notifications);
2325
2324
(* Collect all pending jobs. *)
2326
2325
let l = Lwt_sequence. fold_l (fun (_ , f ) l -> f :: l) jobs [] in
2327
2326
(* Remove them all. *)
0 commit comments