summaryrefslogtreecommitdiffstats
path: root/ocaml/Makefile.am
diff options
context:
space:
mode:
authorRichard Jones <rjones@redhat.com>2010-06-16 15:25:45 +0100
committerRichard Jones <rjones@redhat.com>2010-06-16 15:32:20 +0100
commit1079f74704a06c06996e547fdecf20a8f92799c6 (patch)
tree32b272a9b86952f06f8565526c1fe5d8cf09bee7 /ocaml/Makefile.am
parent1e568f057e8bb7b36cc14e0e531d74b75ad9cb6c (diff)
downloadlibguestfs-1079f74704a06c06996e547fdecf20a8f92799c6.tar.gz
libguestfs-1079f74704a06c06996e547fdecf20a8f92799c6.tar.xz
libguestfs-1079f74704a06c06996e547fdecf20a8f92799c6.zip
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.
Diffstat (limited to 'ocaml/Makefile.am')
-rw-r--r--ocaml/Makefile.am11
1 files changed, 9 insertions, 2 deletions
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 $@