diff options
author | Damien Doligez <damien.doligez-inria.fr> | 2001-08-28 13:22:24 +0000 |
---|---|---|
committer | Damien Doligez <damien.doligez-inria.fr> | 2001-08-28 13:22:24 +0000 |
commit | c144e729ba77af2a64fd701bb9d23c55c400d0db (patch) | |
tree | 97b0c9755957f96fe1cecb80491d7ad236062131 | |
parent | 667846e97e5e792f6dabbd8cec589ba8e3eda297 (diff) |
PR#497
git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@3674 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
-rw-r--r-- | stdlib/gc.ml | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/stdlib/gc.ml b/stdlib/gc.ml index 7a2d26720..22e41808f 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;; |