Add upstream patch to fix segfault in OCaml bindings.
This commit is contained in:
parent
56dd0556bb
commit
aa3b139e75
79
0001-ocaml-Fix-locking-in-event-callbacks.patch
Normal file
79
0001-ocaml-Fix-locking-in-event-callbacks.patch
Normal file
@ -0,0 +1,79 @@
|
||||
From 2b8b3f9794ceb43eabd3083e225c669896d8b186 Mon Sep 17 00:00:00 2001
|
||||
From: "Richard W.M. Jones" <rjones@redhat.com>
|
||||
Date: Tue, 26 Jul 2011 18:57:19 +0100
|
||||
Subject: [PATCH] ocaml: Fix locking in event callbacks.
|
||||
|
||||
We weren't acquiring the GC lock around some allocations, resulting in
|
||||
segfaults when an event callback ran at the same time as a main thread
|
||||
allocation or garbage collection.
|
||||
|
||||
In particular this fixes a noticable crash in guestfs-browser.
|
||||
---
|
||||
ocaml/guestfs_c.c | 36 +++++++++++++++++++++++++++---------
|
||||
1 files changed, 27 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/ocaml/guestfs_c.c b/ocaml/guestfs_c.c
|
||||
index 3f862ea..96e8a35 100644
|
||||
--- a/ocaml/guestfs_c.c
|
||||
+++ b/ocaml/guestfs_c.c
|
||||
@@ -327,13 +327,13 @@ event_bitmask_to_event (uint64_t event)
|
||||
}
|
||||
|
||||
static void
|
||||
-event_callback_wrapper (guestfs_h *g,
|
||||
- void *data,
|
||||
- uint64_t event,
|
||||
- int event_handle,
|
||||
- int flags,
|
||||
- const char *buf, size_t buf_len,
|
||||
- const uint64_t *array, size_t array_len)
|
||||
+event_callback_wrapper_locked (guestfs_h *g,
|
||||
+ void *data,
|
||||
+ uint64_t event,
|
||||
+ int event_handle,
|
||||
+ int flags,
|
||||
+ const char *buf, size_t buf_len,
|
||||
+ const uint64_t *array, size_t array_len)
|
||||
{
|
||||
CAMLparam0 ();
|
||||
CAMLlocal5 (gv, evv, ehv, bufv, arrayv);
|
||||
@@ -360,9 +360,7 @@ event_callback_wrapper (guestfs_h *g,
|
||||
|
||||
value args[5] = { gv, evv, ehv, bufv, arrayv };
|
||||
|
||||
- caml_leave_blocking_section ();
|
||||
rv = caml_callbackN_exn (*(value*)data, 5, args);
|
||||
- caml_enter_blocking_section ();
|
||||
|
||||
/* Callbacks shouldn't throw exceptions. There's not much we can do
|
||||
* except to print it.
|
||||
@@ -375,6 +373,26 @@ event_callback_wrapper (guestfs_h *g,
|
||||
CAMLreturn0;
|
||||
}
|
||||
|
||||
+static void
|
||||
+event_callback_wrapper (guestfs_h *g,
|
||||
+ void *data,
|
||||
+ uint64_t event,
|
||||
+ int event_handle,
|
||||
+ int flags,
|
||||
+ const char *buf, size_t buf_len,
|
||||
+ const uint64_t *array, size_t array_len)
|
||||
+{
|
||||
+ /* Ensure we are holding the GC lock before any GC operations are
|
||||
+ * possible. (RHBZ#725824)
|
||||
+ */
|
||||
+ caml_leave_blocking_section ();
|
||||
+
|
||||
+ event_callback_wrapper_locked (g, data, event, event_handle, flags,
|
||||
+ buf, buf_len, array, array_len);
|
||||
+
|
||||
+ caml_enter_blocking_section ();
|
||||
+}
|
||||
+
|
||||
value
|
||||
ocaml_guestfs_last_errno (value gv)
|
||||
{
|
||||
--
|
||||
1.7.5.2
|
||||
|
@ -30,7 +30,7 @@ Summary: Access and modify virtual machine disk images
|
||||
Name: libguestfs
|
||||
Epoch: 1
|
||||
Version: 1.12.1
|
||||
Release: 3%{?dist}
|
||||
Release: 4%{?dist}
|
||||
License: LGPLv2+
|
||||
Group: Development/Libraries
|
||||
URL: http://libguestfs.org/
|
||||
@ -48,6 +48,9 @@ Patch2: libguestfs-1.12.0-configure-force-machine-accel-tcg.patch
|
||||
# option so that this patch would not be needed.
|
||||
Patch3: 0001-Fix-qemu-machine-option-for-latest-qemu-thanks-Marku.patch
|
||||
|
||||
# Upstream patch to fix segfault in OCaml bindings.
|
||||
Patch4: 0001-ocaml-Fix-locking-in-event-callbacks.patch
|
||||
|
||||
# Basic build requirements:
|
||||
BuildRequires: /usr/bin/pod2man
|
||||
BuildRequires: /usr/bin/pod2text
|
||||
@ -501,6 +504,7 @@ for %{name}.
|
||||
%patch0 -p1
|
||||
%patch2 -p1
|
||||
%patch3 -p1
|
||||
%patch4 -p1
|
||||
|
||||
mkdir -p daemon/m4
|
||||
|
||||
@ -866,10 +870,11 @@ rm -rf $RPM_BUILD_ROOT
|
||||
|
||||
|
||||
%changelog
|
||||
* Tue Jul 26 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.12.1-3
|
||||
* Tue Jul 26 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.12.1-4
|
||||
- New upstream stable branch version 1.12.1.
|
||||
- Remove 5 x upstream patches.
|
||||
- Add non-upstream patch to deal with broken qemu -machine option.
|
||||
- Add upstream patch to fix segfault in OCaml bindings.
|
||||
|
||||
* Tue Jul 26 2011 Richard W.M. Jones <rjones@redhat.com> - 1:1.12.0-11
|
||||
- Bump and rebuild.
|
||||
|
Loading…
Reference in New Issue
Block a user