From 1dec08e3c1a8fdca8475c02397af7c6a69d09586 Mon Sep 17 00:00:00 2001 From: Rudy Ges Date: Thu, 1 Feb 2024 22:08:48 +0100 Subject: [PATCH] [server] do not crash when client exits before end of compilation --- src/compiler/server.ml | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/compiler/server.ml b/src/compiler/server.ml index 17cde830af4..e664d8691a7 100644 --- a/src/compiler/server.ml +++ b/src/compiler/server.ml @@ -923,8 +923,19 @@ and init_wait_socket ip port = end in let read = fun _ -> (let s = read_loop 0 in Unix.clear_nonblock sin; Some s) in - let write s = ssend sin (Bytes.unsafe_of_string s) in - let close() = Unix.close sin in + let closed = ref false in + let close() = + if not !closed then begin + try Unix.close sin with Unix.Unix_error _ -> trace "Error while closing socket."; + closed := true; + end + in + let write s = + if not !closed then + match Unix.getsockopt_error sin with + | Some _ -> close() + | None -> ssend sin (Bytes.unsafe_of_string s); + in false, read, write, close ) in accept