Skip to content

Commit

Permalink
Rename trace functions
Browse files Browse the repository at this point in the history
e.g. `Ctf.note_read` becomes `Trace.read`.

Also, remove some unused functions.
  • Loading branch information
talex5 committed Oct 23, 2023
1 parent 5a11ea6 commit ddcf899
Show file tree
Hide file tree
Showing 15 changed files with 73 additions and 175 deletions.
2 changes: 1 addition & 1 deletion lib_eio/core/cancel.ml
Original file line number Diff line number Diff line change
Expand Up @@ -195,7 +195,7 @@ module Fiber_context = struct

let make ~cc ~vars =
let tid = Trace.mint_id () in
Trace.note_created tid Trace.Task;
Trace.create tid Fiber;
let t = { tid; cancel_context = cc; cancel_node = None; cancel_fn = ignore; vars } in
t.cancel_node <- Some (Lwt_dllist.add_r t cc.fibers);
t
Expand Down
10 changes: 5 additions & 5 deletions lib_eio/core/fiber.ml
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,10 @@ let fork ~sw f =
Switch.with_op sw @@ fun () ->
match f () with
| () ->
Trace.note_resolved (Cancel.Fiber_context.tid new_fiber) ~ex:None
Trace.resolve (Cancel.Fiber_context.tid new_fiber) ~ex:None
| exception ex ->
Switch.fail sw ex; (* The [with_op] ensures this will succeed *)
Trace.note_resolved (Cancel.Fiber_context.tid new_fiber) ~ex:(Some ex)
Trace.resolve (Cancel.Fiber_context.tid new_fiber) ~ex:(Some ex)
) (* else the fiber should report the error to [sw], but [sw] is failed anyway *)

let fork_daemon ~sw f =
Expand All @@ -35,13 +35,13 @@ let fork_daemon ~sw f =
match f () with
| `Stop_daemon ->
(* The daemon asked to stop. *)
Trace.note_resolved (Cancel.Fiber_context.tid new_fiber) ~ex:None
Trace.resolve (Cancel.Fiber_context.tid new_fiber) ~ex:None
| exception Cancel.Cancelled Exit when not (Cancel.is_on sw.cancel) ->
(* The daemon was cancelled because all non-daemon fibers are finished. *)
Trace.note_resolved (Cancel.Fiber_context.tid new_fiber) ~ex:None
Trace.resolve (Cancel.Fiber_context.tid new_fiber) ~ex:None
| exception ex ->
Switch.fail sw ex; (* The [with_daemon] ensures this will succeed *)
Trace.note_resolved (Cancel.Fiber_context.tid new_fiber) ~ex:(Some ex)
Trace.resolve (Cancel.Fiber_context.tid new_fiber) ~ex:(Some ex)
) (* else the fiber should report the error to [sw], but [sw] is failed anyway *)

let fork_promise ~sw f =
Expand Down
12 changes: 6 additions & 6 deletions lib_eio/core/promise.ml
Original file line number Diff line number Diff line change
Expand Up @@ -26,19 +26,19 @@ let create_with_id id =

let create ?label () =
let id = Trace.mint_id () in
Trace.note_created ?label id Trace.Promise;
Trace.create ?label id Promise;
create_with_id id

let create_resolved x =
let id = Trace.mint_id () in
Trace.note_created id Trace.Promise;
Trace.create id Promise;
to_public_promise { id; state = Atomic.make (Resolved x) }

let await t =
let t = of_public_promise t in
match Atomic.get t.state with
| Resolved x ->
Trace.note_read t.id;
Trace.read t.id;
x
| Unresolved b ->
Suspend.enter (fun ctx enqueue ->
Expand All @@ -53,15 +53,15 @@ let await t =
| Unresolved _ ->
(* We observed the promise to be still unresolved after registering a waiter.
Therefore any resolution must happen after we were registered and we will be notified. *)
Trace.note_try_read t.id;
Trace.try_read t.id;
Cancel.Fiber_context.set_cancel_fn ctx (fun ex ->
if Broadcast.cancel request then enqueue (Error ex)
(* else already resumed *)
)
);
match Atomic.get t.state with
| Resolved x ->
Trace.note_read t.id;
Trace.read t.id;
x
| Unresolved _ -> assert false

Expand All @@ -76,7 +76,7 @@ let resolve t v =
| Resolved _ -> invalid_arg "Can't resolve already-resolved promise"
| Unresolved b as prev ->
if Atomic.compare_and_set t.state prev (Resolved v) then (
Trace.note_resolved t.id ~ex:None;
Trace.resolve t.id ~ex:None;
Broadcast.resume_all b
) else (
(* Otherwise, the promise was already resolved. Retry (to get the error). *)
Expand Down
2 changes: 1 addition & 1 deletion lib_eio/core/single_waiter.ml
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,6 @@ let await t id =
t.wake <- (fun x ->
Cancel.Fiber_context.clear_cancel_fn ctx;
t.wake <- ignore;
Trace.note_read ~reader:id ctx.tid;
Trace.read ~reader:id ctx.tid;
enqueue x
)
10 changes: 5 additions & 5 deletions lib_eio/core/switch.ml
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ let combine_exn ex = function
let fail ?(bt=Printexc.get_raw_backtrace ()) t ex =
check_our_domain t;
if t.exs = None then
Trace.note_resolved t.id ~ex:(Some ex);
Trace.resolve t.id ~ex:(Some ex);
t.exs <- Some (combine_exn (ex, bt) t.exs);
try
Cancel.cancel t.cancel ex
Expand Down Expand Up @@ -91,7 +91,7 @@ let or_raise = function
let rec await_idle t =
(* Wait for fibers to finish: *)
while t.fibers > 0 do
Trace.note_try_read t.id;
Trace.try_read t.id;
Single_waiter.await t.waiter t.id
done;
(* Call on_release handlers: *)
Expand Down Expand Up @@ -119,7 +119,7 @@ let maybe_raise_exs t =

let create cancel =
let id = Trace.mint_id () in
Trace.note_created id Trace.Switch;
Trace.create id Switch;
{
id;
fibers = 1; (* The main function counts as a fiber *)
Expand All @@ -135,7 +135,7 @@ let run_internal t fn =
| v ->
dec_fibers t;
await_idle t;
Trace.note_read t.id;
Trace.read t.id;
maybe_raise_exs t; (* Check for failure while finishing *)
(* Success. *)
v
Expand All @@ -146,7 +146,7 @@ let run_internal t fn =
dec_fibers t;
fail ~bt t ex;
await_idle t;
Trace.note_read t.id;
Trace.read t.id;
maybe_raise_exs t;
assert false

Expand Down
96 changes: 13 additions & 83 deletions lib_eio/core/trace.ml
Original file line number Diff line number Diff line change
Expand Up @@ -47,27 +47,8 @@ let mint_id () =
Domain.DLS.set next_id_key next_id_local_succ;
next_id_local

type hiatus_reason =
| Wait_for_work
| Suspend
| Hibernate

type event =
| Wait
| Task
| Bind
| Try
| Choose
| Pick
| Join
| Map
| Condition
| On_success
| On_failure
| On_termination
| On_any
| Ignore_result
| Async
type ty =
| Fiber
| Promise
| Semaphore
| Switch
Expand All @@ -80,21 +61,7 @@ let current_thread = ref (-1)

let int_of_thread_type t =
match t with
| Wait -> 0
| Task -> 1
| Bind -> 2
| Try -> 3
| Choose -> 4
| Pick -> 5
| Join -> 6
| Map -> 7
| Condition -> 8
| On_success -> 9
| On_failure -> 10
| On_termination -> 11
| On_any -> 12
| Ignore_result -> 13
| Async -> 14
| Fiber -> 1
| Promise -> 15
| Semaphore -> 16
| Switch -> 17
Expand Down Expand Up @@ -207,12 +174,12 @@ module Control = struct
let op_fails = 3
(* let op_becomes = 4 *)
let op_label = 5
let op_increase = 6
(* let op_increase = 6 *)
let op_switch = 7
(* let op_gc = 8 *)
(* let op_old_signal = 9 *)
let op_try_read = 10
let op_counter_value = 11
(* let op_counter_value = 11 *)
let op_read_later = 12
let op_signal = 13

Expand Down Expand Up @@ -329,20 +296,6 @@ module Control = struct
|> write_string log.log msg
|> end_event

let note_increase log counter amount =
add_event log op_increase (17 + String.length counter)
|> write_tid log.log !current_thread
|> write64 log.log (Int64.of_int amount)
|> write_string log.log counter
|> end_event

let note_counter_value log counter value =
add_event log op_counter_value (17 + String.length counter)
|> write_tid log.log !current_thread
|> write64 log.log (Int64.of_int value)
|> write_string log.log counter
|> end_event

let note_switch log new_current =
if new_current <> !current_thread then (
current_thread := new_current;
Expand Down Expand Up @@ -397,42 +350,34 @@ let label name =
| None -> ()
| Some log -> Control.note_label log !current_thread name

let note_fork () =
let child = mint_id () in
begin match !Control.event_log with
| None -> ()
| Some log -> Control.note_created log child Task
end;
child

let note_created ?label id ty =
let create ?label id ty =
match !Control.event_log with
| None -> ()
| Some log ->
Control.note_created log id ty;
Option.iter (Control.note_label log id) label

let note_switch new_current =
let fiber new_current =
match !Control.event_log with
| None -> ()
| Some log -> Control.note_switch log new_current

let note_hiatus _reason =
let hiatus () =
match !Control.event_log with
| None -> ()
| Some log -> Control.note_suspend log ()

let note_resume new_current =
let resume new_current =
match !Control.event_log with
| None -> ()
| Some log -> Control.note_switch log new_current

let note_try_read input =
let try_read input =
match !Control.event_log with
| None -> ()
| Some log -> Control.note_try_read log !current_thread input

let note_read ?reader input =
let read ?reader input =
match !Control.event_log with
| None -> ()
| Some log ->
Expand All @@ -443,12 +388,12 @@ let note_read ?reader input =
in
Control.note_read log ~reader input

let note_resolved id ~ex =
let resolve id ~ex =
match !Control.event_log with
| None -> ()
| Some log -> Control.note_resolved log id ~ex

let note_signal ?src dst =
let signal ?src dst =
match !Control.event_log with
| None -> ()
| Some log ->
Expand All @@ -458,18 +403,3 @@ let note_signal ?src dst =
| Some x -> x
in
Control.note_signal ~src log dst

let note_increase counter amount =
match !Control.event_log with
| None -> ()
| Some log -> Control.note_increase log counter amount

let note_counter_value counter value =
match !Control.event_log with
| None -> ()
| Some log -> Control.note_counter_value log counter value

let should_resolve thread =
match !Control.event_log with
| None -> ()
| Some log -> Control.note_label log thread "__should_resolve" (* Hack! *)
Loading

0 comments on commit ddcf899

Please sign in to comment.