From 0d776c56564bdc5daf4335df46c77dc5dd998020 Mon Sep 17 00:00:00 2001 From: Antonio Nuno Monteiro Date: Wed, 11 Mar 2026 18:58:40 -0700 Subject: [PATCH] perf(eio): remove Fiber.first from read loop --- eio/gluten_eio.ml | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/eio/gluten_eio.ml b/eio/gluten_eio.ml index 1b6e8b9..32d5437 100644 --- a/eio/gluten_eio.ml +++ b/eio/gluten_eio.ml @@ -87,15 +87,7 @@ module IO_loop = struct let read_closed, resolve_read_closed = read_closed and write_closed = ref false in let read_buffer = Buffer.create read_buffer_size in - let rec read_loop = - let read socket read_buffer = - Fiber.first - (fun () -> read socket read_buffer) - (fun () -> - Promise.await read_closed; - raise End_of_file) - in - fun () -> + let rec read_loop () = let rec read_loop_step () = match Runtime.next_read_operation t with | `Read -> @@ -242,7 +234,9 @@ module Client = struct (fun () -> let cancel_reader, resolve_cancel_reader = read_closed in if not (Promise.is_resolved cancel_reader) - then Promise.resolve resolve_cancel_reader ()) + then ( + IO_loop.shutdown socket `Receive; + Promise.resolve resolve_cancel_reader ())) ; shutdown_complete = shutdown_p }