From 42ad7672e901f318b730e902b741cfcfce5f7202 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Thir=C3=A9?= Date: Fri, 3 Jan 2025 18:16:30 +0100 Subject: [PATCH] Lwt-unix: Fix file descriptor leak with `Lwt_unix.shutdown` --- lwt-unix/gluten_lwt_unix.ml | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/lwt-unix/gluten_lwt_unix.ml b/lwt-unix/gluten_lwt_unix.ml index 79f20b1..6f7c35b 100644 --- a/lwt-unix/gluten_lwt_unix.ml +++ b/lwt-unix/gluten_lwt_unix.ml @@ -42,11 +42,18 @@ module Io : match Lwt_unix.state socket with | Closed -> Lwt.return_unit | _ -> - Lwt.catch + Lwt.finalize (fun () -> - Lwt_unix.shutdown socket SHUTDOWN_ALL; + Lwt.catch + (fun () -> + Lwt_unix.shutdown socket SHUTDOWN_ALL; + Lwt.return_unit) + (function + | Unix.Unix_error (Unix.ENOTCONN, _, _) -> Lwt.return_unit + | exn -> Lwt.reraise exn)) + (fun () -> Lwt_unix.close socket) - (fun _exn -> Lwt.return_unit) + let read socket bigstring ~off ~len = Lwt.catch