From 1079f74704a06c06996e547fdecf20a8f92799c6 Mon Sep 17 00:00:00 2001 From: Richard Jones Date: Wed, 16 Jun 2010 15:25:45 +0100 Subject: ocaml: Fix thread safety of strings in bindings (RHBZ#604691). There's a thread safety issue with the current OCaml bindings which is well explained in the bug report: https://bugzilla.redhat.com/show_bug.cgi?id=604691 This commit fixes the safety issue by copying strings temporarily before releasing the thread lock. Updated code looks like this: char *filename = guestfs_safe_strdup (g, String_val (filenamev)); int r; caml_enter_blocking_section (); r = guestfs_add_drive_ro (g, filename); caml_leave_blocking_section (); free (filename); if (r == -1) ocaml_guestfs_raise_error (g, "add_drive_ro"); Also included is a regression test. --- ocaml/Makefile.am | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'ocaml/Makefile.am') diff --git a/ocaml/Makefile.am b/ocaml/Makefile.am index 38238f69..99bb390f 100644 --- a/ocaml/Makefile.am +++ b/ocaml/Makefile.am @@ -67,10 +67,10 @@ TESTS_ENVIRONMENT = \ TESTS = run-bindtests \ t/guestfs_005_load t/guestfs_010_launch t/guestfs_050_lvcreate \ - t/guestfs_060_readdir t/guestfs_500_inspect + t/guestfs_060_readdir t/guestfs_070_threads t/guestfs_500_inspect noinst_DATA += bindtests \ t/guestfs_005_load t/guestfs_010_launch t/guestfs_050_lvcreate \ - t/guestfs_060_readdir t/guestfs_500_inspect + t/guestfs_060_readdir t/guestfs_070_threads t/guestfs_500_inspect bindtests: bindtests.cmx mlguestfs.cmxa mkdir -p t @@ -92,12 +92,19 @@ t/guestfs_060_readdir: t/guestfs_060_readdir.cmx mlguestfs.cmxa mkdir -p t $(OCAMLFIND) ocamlopt -cclib -L$(top_builddir)/src/.libs -I . -package xml-light,unix -linkpkg mlguestfs.cmxa $< -o $@ +t/guestfs_070_threads: t/guestfs_070_threads.cmx mlguestfs.cmxa + mkdir -p t + $(OCAMLFIND) ocamlopt -cclib -L$(top_builddir)/src/.libs -I . -package unix,threads -thread -linkpkg mlguestfs.cmxa $< -o $@ + t/guestfs_500_inspect: t/guestfs_500_inspect.cmx mlguestfs.cmxa mkdir -p t $(OCAMLFIND) ocamlopt -cclib -L$(top_builddir)/src/.libs -I . -package xml-light,unix -linkpkg mlguestfs.cmxa $< -o $@ # Need to rebuild the tests from source if the main library has # changed at all, otherwise we get inconsistent assumptions. +t/guestfs_070_threads.cmx: t/guestfs_070_threads.ml mlguestfs.cmxa + $(OCAMLFIND) ocamlopt -package unix,threads -thread -linkpkg -c $< -o $@ + t/%.cmx: t/%.ml mlguestfs.cmxa $(OCAMLFIND) ocamlopt -package xml-light,unix -linkpkg -c $< -o $@ -- cgit