@@ -175,6 +175,13 @@ module Main_state = struct
175175 Scheduler_state. add_action_from_another_thread_ (get_st () ) f
176176end
177177
178+ let await_lwt_from_another_thread fut =
179+ let tr = M.Trigger. create () in
180+ Main_state. add_action_from_another_thread (fun () ->
181+ register_trigger_on_lwt_termination fut tr);
182+ M.Trigger. await_exn tr;
183+ await_lwt_terminated fut
184+
178185let await_lwt (fut : _ Lwt.t ) =
179186 if Scheduler_state. on_lwt_thread_ (Main_state. get_st () ) then (
180187 (* can directly access the future *)
@@ -186,13 +193,8 @@ let await_lwt (fut : _ Lwt.t) =
186193 register_trigger_on_lwt_termination fut tr;
187194 M.Trigger. await_exn tr;
188195 await_lwt_terminated fut
189- ) else (
190- let tr = M.Trigger. create () in
191- Main_state. add_action_from_another_thread (fun () ->
192- register_trigger_on_lwt_termination fut tr);
193- M.Trigger. await_exn tr;
194- await_lwt_terminated fut
195- )
196+ ) else
197+ await_lwt_from_another_thread fut
196198
197199let lwt_of_fut (fut : 'a M.Fut.t ) : 'a Lwt.t =
198200 if not (Main_state. on_lwt_thread () ) then
@@ -303,7 +305,7 @@ let run_in_lwt_and_await (f : unit -> 'a) : 'a =
303305 (* run immediately *)
304306 f ()
305307 else
306- await_lwt @@ spawn_lwt f
308+ await_lwt_from_another_thread @@ spawn_lwt f
307309
308310let lwt_main (f : _ -> 'a ) : 'a =
309311 let st = setup () in
0 commit comments