Skip to content

Commit 6413e90

Browse files
committed
Refactor Win32 blocking fd checks to use match guards
1 parent 6217adb commit 6413e90

1 file changed

Lines changed: 19 additions & 7 deletions

File tree

src/unix/lwt_unix.cppo.ml

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -621,10 +621,12 @@ let read ch buf pos len =
621621
invalid_arg "Lwt_unix.read"
622622
else
623623
Lazy.force ch.blocking >>= function
624-
| true ->
624+
| true when Sys.win32 ->
625625
(* On Windows, select() doesn't work with pipe handles, so skip
626626
wait_read and let the worker thread handle blocking directly. *)
627-
(if Sys.win32 then Lwt.return_unit else wait_read ch) >>= fun () ->
627+
run_job (read_job ch.fd buf pos len)
628+
| true ->
629+
wait_read ch >>= fun () ->
628630
run_job (read_job ch.fd buf pos len)
629631
| false ->
630632
wrap_syscall Read ch (fun () -> stub_read ch.fd buf pos len)
@@ -634,8 +636,10 @@ let pread ch buf ~file_offset pos len =
634636
invalid_arg "Lwt_unix.pread"
635637
else
636638
Lazy.force ch.blocking >>= function
639+
| true when Sys.win32 ->
640+
run_job (pread_job ch.fd buf ~file_offset pos len)
637641
| true ->
638-
(if Sys.win32 then Lwt.return_unit else wait_read ch) >>= fun () ->
642+
wait_read ch >>= fun () ->
639643
run_job (pread_job ch.fd buf ~file_offset pos len)
640644
| false ->
641645
wrap_syscall Read ch (fun () -> stub_pread ch.fd buf ~file_offset pos len)
@@ -651,8 +655,10 @@ let read_bigarray function_name fd buf pos len =
651655
invalid_arg function_name
652656
else
653657
blocking fd >>= function
658+
| true when Sys.win32 ->
659+
run_job (read_bigarray_job (unix_file_descr fd) buf pos len)
654660
| true ->
655-
(if Sys.win32 then Lwt.return_unit else wait_read fd) >>= fun () ->
661+
wait_read fd >>= fun () ->
656662
run_job (read_bigarray_job (unix_file_descr fd) buf pos len)
657663
| false ->
658664
wrap_syscall Read fd (fun () ->
@@ -681,8 +687,10 @@ let write ch buf pos len =
681687
invalid_arg "Lwt_unix.write"
682688
else
683689
Lazy.force ch.blocking >>= function
690+
| true when Sys.win32 ->
691+
run_job (write_job ch.fd buf pos len)
684692
| true ->
685-
(if Sys.win32 then Lwt.return_unit else wait_write ch) >>= fun () ->
693+
wait_write ch >>= fun () ->
686694
run_job (write_job ch.fd buf pos len)
687695
| false ->
688696
wrap_syscall Write ch (fun () -> stub_write ch.fd buf pos len)
@@ -692,8 +700,10 @@ let pwrite ch buf ~file_offset pos len =
692700
invalid_arg "Lwt_unix.pwrite"
693701
else
694702
Lazy.force ch.blocking >>= function
703+
| true when Sys.win32 ->
704+
run_job (pwrite_job ch.fd buf ~file_offset pos len)
695705
| true ->
696-
(if Sys.win32 then Lwt.return_unit else wait_write ch) >>= fun () ->
706+
wait_write ch >>= fun () ->
697707
run_job (pwrite_job ch.fd buf ~file_offset pos len)
698708
| false ->
699709
wrap_syscall Write ch (fun () -> stub_pwrite ch.fd buf ~file_offset pos len)
@@ -717,8 +727,10 @@ let write_bigarray function_name fd buf pos len =
717727
invalid_arg function_name
718728
else
719729
blocking fd >>= function
730+
| true when Sys.win32 ->
731+
run_job (write_bigarray_job (unix_file_descr fd) buf pos len)
720732
| true ->
721-
(if Sys.win32 then Lwt.return_unit else wait_write fd) >>= fun () ->
733+
wait_write fd >>= fun () ->
722734
run_job (write_bigarray_job (unix_file_descr fd) buf pos len)
723735
| false ->
724736
wrap_syscall Write fd (fun () ->

0 commit comments

Comments
 (0)