[Libguestfs] [PATCH libguestfs 2/2] Only leave/enter blocking_section when OCaml lock is not held
Laszlo Ersek
lersek at redhat.com
Tue May 30 11:32:08 UTC 2023
On 5/27/23 15:35, Jürgen Hötzel wrote:
> Fixes deadlocks on OCaml5 when trying to get the lock that is already
> held:
>
> Fatal error during lock: Resource deadlock avoided
> ---
> ocaml/guestfs-c.c | 8 ++++++--
> 1 file changed, 6 insertions(+), 2 deletions(-)
>
> diff --git a/ocaml/guestfs-c.c b/ocaml/guestfs-c.c
> index 3888c9456..bcf8e6ab3 100644
> --- a/ocaml/guestfs-c.c
> +++ b/ocaml/guestfs-c.c
> @@ -395,12 +395,16 @@ event_callback_wrapper (guestfs_h *g,
> /* Ensure we are holding the GC lock before any GC operations are
> * possible. (RHBZ#725824)
> */
> - caml_leave_blocking_section ();
> + bool in_blocking_section = (caml_state == NULL);
> +
> + if (in_blocking_section)
> + caml_leave_blocking_section ();
>
> event_callback_wrapper_locked (g, data, event, event_handle, flags,
> buf, buf_len, array, array_len);
>
> - caml_enter_blocking_section ();
> + if (in_blocking_section)
> + caml_enter_blocking_section ();
> }
>
> value
I think the commit message should describe the issue and justify the
change in much more detail.
Laszlo
More information about the Libguestfs
mailing list