@@ -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