From 677ae5c36a2577e713732c09ae559f5b45dc1c13 Mon Sep 17 00:00:00 2001 From: Simon Cruanes Date: Wed, 24 Sep 2025 14:58:20 -0400 Subject: [PATCH] perf: fast path for Moonpool_lwt.run_in_lwt_and_await --- src/lwt/moonpool_lwt.ml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/lwt/moonpool_lwt.ml b/src/lwt/moonpool_lwt.ml index 91437fee..200ab72e 100644 --- a/src/lwt/moonpool_lwt.ml +++ b/src/lwt/moonpool_lwt.ml @@ -295,9 +295,16 @@ let spawn_lwt f : _ Lwt.t = lwt_fut let spawn_lwt_ignore f = ignore (spawn_lwt f : unit Lwt.t) -let run_in_lwt_and_await (f : unit -> 'a) : 'a = await_lwt @@ spawn_lwt f let on_lwt_thread = Main_state.on_lwt_thread +let run_in_lwt_and_await (f : unit -> 'a) : 'a = + let st = Main_state.get_st () in + if Scheduler_state.on_lwt_thread_ st then + (* run immediately *) + f () + else + await_lwt @@ spawn_lwt f + let lwt_main (f : _ -> 'a) : 'a = let st = setup () in (* make sure to cleanup *)