Merge pull request #22 from craff/master

Unix.accept may raise an exception
This commit is contained in:
Simon Cruanes 2021-11-30 09:43:22 -05:00 committed by GitHub
commit ac05b9eaa1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -1088,17 +1088,22 @@ let run (self:t) : (unit,_) result =
while self.running do while self.running do
(* limit concurrency *) (* limit concurrency *)
Sem_.acquire 1 self.sem_max_connections; Sem_.acquire 1 self.sem_max_connections;
let client_sock, _ = Unix.accept sock in try
self.new_thread let client_sock, _ = Unix.accept sock in
(fun () -> self.new_thread
try (fun () ->
handle_client_ self client_sock; try
Sem_.release 1 self.sem_max_connections; handle_client_ self client_sock;
with e -> Sem_.release 1 self.sem_max_connections;
(try Unix.close client_sock with _ -> ()); with e ->
Sem_.release 1 self.sem_max_connections; (try Unix.close client_sock with _ -> ());
raise e Sem_.release 1 self.sem_max_connections;
); raise e
);
with e ->
_debug (fun k -> k
"Unix.accept or Thread.create raised an exception: %s"
(Printexc.to_string e))
done; done;
Ok () Ok ()
with e -> Error e with e -> Error e