Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove obsolete second wakeup_paused #917

Merged
merged 8 commits into from
Jul 31, 2023
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Deprecated unix's yield functions implemented as calls to Lwt.pause
raphael-proust committed Jul 28, 2023
commit 322cc45db73aaf1f77041db91e53d9ab78d773d2
3 changes: 0 additions & 3 deletions src/core/lwt.mli
Original file line number Diff line number Diff line change
@@ -1836,9 +1836,6 @@ val pause : unit -> unit t
Putting the rest of your computation into a callback of [Lwt.pause ()]
creates a “yield” that gives other callbacks a chance to run first.
To wait for one complete iteration of the main loop you need to wait for
[Lwt.pause () >>= Lwt.pause]
For example, to break up a long-running computation, allowing I/O to be
handled between chunks:
14 changes: 2 additions & 12 deletions src/unix/lwt_main.ml
Original file line number Diff line number Diff line change
@@ -16,12 +16,10 @@ open Lwt.Infix

let enter_iter_hooks = Lwt_sequence.create ()
let leave_iter_hooks = Lwt_sequence.create ()
let yielded = Lwt_sequence.create ()

let yield () = (Lwt.add_task_r [@ocaml.warning "-3"]) yielded
let yield () = Lwt.pause ()
raphael-proust marked this conversation as resolved.
Show resolved Hide resolved

let abandon_yielded_and_paused () =
Lwt_sequence.clear yielded;
Lwt.abandon_paused ()

let run p =
@@ -34,20 +32,12 @@ let run p =
Lwt_sequence.iter_l (fun f -> f ()) enter_iter_hooks;

(* Do the main loop call. *)
let should_block_waiting_for_io =
Lwt.paused_count () = 0 && Lwt_sequence.is_empty yielded in
let should_block_waiting_for_io = Lwt.paused_count () = 0 in
Lwt_engine.iter should_block_waiting_for_io;

(* Fulfill paused promises. *)
Lwt.wakeup_paused ();

(* Fulfill yield promises. *)
if not (Lwt_sequence.is_empty yielded) then begin
let tmp = Lwt_sequence.create () in
Lwt_sequence.transfer_r yielded tmp;
Lwt_sequence.iter_l (fun resolver -> Lwt.wakeup resolver ()) tmp
end;

(* Call leave hooks. *)
Lwt_sequence.iter_l (fun f -> f ()) leave_iter_hooks;

14 changes: 6 additions & 8 deletions src/unix/lwt_main.mli
Original file line number Diff line number Diff line change
@@ -49,22 +49,20 @@ val yield : unit -> unit Lwt.t [@@deprecated "Use Lwt.pause instead"]
@deprecated Since 5.5.0 [yield] is deprecated in favor of the more general
{!Lwt.pause} in order to avoid discrepancies in resolution (see below) and
stay compatible with other execution environments such as js_of_ocaml.
stay compatible with other execution environments such as js_of_ocaml. *)

Currently, paused promises are resolved more frequently than yielded promises.
The difference is unintended but existing applications could depend on it.
Unifying the two pools of promises into one in the future would eliminate
possible discrepancies and simplify the code. *)

val abandon_yielded_and_paused : unit -> unit
val abandon_yielded_and_paused : unit -> unit [@@deprecated "Use Lwt.abandon_paused instead"]
(** Causes promises created with {!Lwt.pause} and {!Lwt_main.yield} to remain
forever pending.
[yield] is now deprecated in favor of the more general {!Lwt.pause}.
Once [yield] is phased out, this function will be deprecated as well.
raphael-proust marked this conversation as resolved.
Show resolved Hide resolved
This is meant for use with {!Lwt_unix.fork}, as a way to “abandon” more
promise chains that are pending in your process. *)
promise chains that are pending in your process.
@deprecated Since 5.5.1 [abandon_yielded_and_paused] is deprecated in favour
of [Lwt.abandon_paused]. *)



2 changes: 1 addition & 1 deletion src/unix/lwt_unix.cppo.ml
Original file line number Diff line number Diff line change
@@ -123,7 +123,7 @@ let sleep delay =
Lwt.on_cancel waiter (fun () -> Lwt_engine.stop_event ev);
waiter

let yield = (Lwt_main.yield [@warning "-3"])
let yield = Lwt.pause

let auto_yield timeout =
let limit = ref (Unix.gettimeofday () +. timeout) in