ocaml: Fix guestfs_065_implicit_close.ml for OCaml 5

Link: https://discuss.ocaml.org/t/ocaml-5-forcing-objects-to-be-collected-and-finalized/12492/3
Thanks: Josh Berdine
Thanks: Vincent Laviron
(cherry picked from commit 7d4e9c927e)
This commit is contained in:
Richard W.M. Jones
2023-06-27 16:20:49 +01:00
parent c13dd5b6d4
commit b6c9d46248

View File

@@ -16,22 +16,27 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*)
let close_invoked = ref 0
let [@inline never][@local never] run () =
let close_invoked = ref 0 in
let close _ _ _ _ =
incr close_invoked
let close _ _ _ _ =
incr close_invoked
in
let () =
let g = new Guestfs.guestfs () in
ignore (g#set_event_callback close [Guestfs.EVENT_CLOSE]);
assert (!close_invoked = 0)
(* Allow the 'g' handle to go out of scope here, to ensure there is no
* reference held on the stack.
*)
let () =
let g = new Guestfs.guestfs () in
ignore (g#set_event_callback close [Guestfs.EVENT_CLOSE]);
assert (!close_invoked = 0)
(* Allow the 'g' handle to go out of scope here, to ensure there is no
* reference held on the stack.
*)
in
(* This should cause the GC to close the handle. *)
let () = Gc.full_major ()
(* This should cause the GC to close the handle. *)
Gc.full_major ();
let () = assert (!close_invoked = 1)
assert (!close_invoked = 1);
let () = Gc.compact ()
Gc.compact ()
let () = run ()