Skip to content

Commit 1edd527

Browse files
committed
fix(ocamlformat): pass fd's correctly
do not pass non-blocking fd's to ocamlformat Signed-off-by: Rudi Grinberg <[email protected]> ps-id: E8756EAF-644E-426D-8E2C-B6D224E080C8
1 parent e9df689 commit 1edd527

File tree

1 file changed

+24
-11
lines changed

1 file changed

+24
-11
lines changed

ocaml-lsp-server/src/ocamlformat.ml

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,20 +8,33 @@ type command_result =
88
}
99

1010
let run_command prog stdin_value args : command_result Fiber.t =
11-
let* stdin_i, stdin_o = Lev_fiber.Io.pipe ~cloexec:true () in
12-
let* stdout_i, stdout_o = Lev_fiber.Io.pipe ~cloexec:true () in
13-
let* stderr_i, stderr_o = Lev_fiber.Io.pipe ~cloexec:true () in
11+
let stdin_i, stdin_o = Unix.pipe ~cloexec:true () in
12+
let stdout_i, stdout_o = Unix.pipe ~cloexec:true () in
13+
let stderr_i, stderr_o = Unix.pipe ~cloexec:true () in
1414
let pid =
15-
let fd io = Lev_fiber.Fd.fd (Lev_fiber.Io.fd io) in
16-
let stdin = fd stdin_i in
17-
let stdout = fd stdout_o in
18-
let stderr = fd stderr_o in
1915
let argv = prog :: args in
20-
Spawn.spawn ~prog ~argv ~stdin ~stdout ~stderr () |> Stdune.Pid.of_int
16+
Spawn.spawn ~prog ~argv ~stdin:stdin_i ~stdout:stdout_o ~stderr:stderr_o ()
17+
|> Stdune.Pid.of_int
2118
in
22-
Lev_fiber.Io.close stdin_i;
23-
Lev_fiber.Io.close stdout_o;
24-
Lev_fiber.Io.close stderr_o;
19+
Unix.close stdin_i;
20+
Unix.close stdout_o;
21+
Unix.close stderr_o;
22+
let blockity =
23+
if Sys.win32 then
24+
`Blocking
25+
else (
26+
Unix.set_nonblock stdin_o;
27+
Unix.set_nonblock stdout_i;
28+
`Non_blocking true
29+
)
30+
in
31+
let make fd what =
32+
let fd = Lev_fiber.Fd.create fd blockity in
33+
Lev_fiber.Io.create fd what
34+
in
35+
let* stdin_o = make stdin_o Output in
36+
let* stdout_i = make stdout_i Input in
37+
let* stderr_i = make stderr_i Input in
2538
let stdin () =
2639
let+ () =
2740
Lev_fiber.Io.with_write stdin_o ~f:(fun w ->

0 commit comments

Comments
 (0)