summaryrefslogtreecommitdiff
path: root/stdlib/gc.ml
diff options
context:
space:
mode:
authorDamien Doligez <damien.doligez-inria.fr>2001-08-28 13:22:24 +0000
committerDamien Doligez <damien.doligez-inria.fr>2001-08-28 13:22:24 +0000
commitc144e729ba77af2a64fd701bb9d23c55c400d0db (patch)
tree97b0c9755957f96fe1cecb80491d7ad236062131 /stdlib/gc.ml
parent667846e97e5e792f6dabbd8cec589ba8e3eda297 (diff)
downloadocaml-c144e729ba77af2a64fd701bb9d23c55c400d0db.tar.gz
PR#497
git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@3674 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
Diffstat (limited to 'stdlib/gc.ml')
-rw-r--r--stdlib/gc.ml19
1 files changed, 11 insertions, 8 deletions
diff --git a/stdlib/gc.ml b/stdlib/gc.ml
index 7a2d267205..22e41808f4 100644
--- a/stdlib/gc.ml
+++ b/stdlib/gc.ml
@@ -75,19 +75,22 @@ let allocated_bytes () =
external finalise : ('a -> unit) -> 'a -> unit = "final_register";;
-type alarm = {mutable active : bool; f : unit -> unit};;
+type alarm_rec = {active : alarm; f : unit -> unit}
+and alarm = bool ref
+;;
-let rec call_alarm a =
- if a.active then begin
- finalise call_alarm a;
- a.f ();
+let rec call_alarm arec =
+ if !(arec.active) then begin
+ finalise call_alarm arec;
+ arec.f ();
end;
;;
let create_alarm f =
- let a = { active = true; f = f } in
- finalise call_alarm a;
+ let a = ref true in
+ let arec = { active = ref true; f = f } in
+ finalise call_alarm arec;
a
;;
-let delete_alarm a = a.active <- false;;
+let delete_alarm a = a := false;;