summaryrefslogtreecommitdiff
path: root/0020-ocaml-Fix-guestfs_065_implicit_close.ml-for-OCaml-5.patch
diff options
context:
space:
mode:
Diffstat (limited to '0020-ocaml-Fix-guestfs_065_implicit_close.ml-for-OCaml-5.patch')
-rw-r--r--0020-ocaml-Fix-guestfs_065_implicit_close.ml-for-OCaml-5.patch59
1 files changed, 59 insertions, 0 deletions
diff --git a/0020-ocaml-Fix-guestfs_065_implicit_close.ml-for-OCaml-5.patch b/0020-ocaml-Fix-guestfs_065_implicit_close.ml-for-OCaml-5.patch
new file mode 100644
index 0000000..2bd8857
--- /dev/null
+++ b/0020-ocaml-Fix-guestfs_065_implicit_close.ml-for-OCaml-5.patch
@@ -0,0 +1,59 @@
+From 7ceafac98d3eb28d25195622cb6dc1158e9c1c2f Mon Sep 17 00:00:00 2001
+From: "Richard W.M. Jones" <rjones@redhat.com>
+Date: Tue, 27 Jun 2023 16:20:49 +0100
+Subject: [PATCH] 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 7d4e9c927e8478662ece204b98ee3b5b147ab4b9)
+---
+ ocaml/t/guestfs_065_implicit_close.ml | 33 +++++++++++++++------------
+ 1 file changed, 19 insertions(+), 14 deletions(-)
+
+diff --git a/ocaml/t/guestfs_065_implicit_close.ml b/ocaml/t/guestfs_065_implicit_close.ml
+index f2dfecbd..9e68bc4c 100644
+--- a/ocaml/t/guestfs_065_implicit_close.ml
++++ b/ocaml/t/guestfs_065_implicit_close.ml
+@@ -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 ()