X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=ocaml%2Fguestfs_c.c;h=deb1026a6c188ace2536e33d49adef38ea09607b;hb=5248114edea548d142d7c7ce644cea22f7957822;hp=7648ba931c1d949e516159486ee8c56391a757e5;hpb=3978a308a586e3a671807eb3716ba7c7596af21f;p=libguestfs.git diff --git a/ocaml/guestfs_c.c b/ocaml/guestfs_c.c index 7648ba9..deb1026 100644 --- a/ocaml/guestfs_c.c +++ b/ocaml/guestfs_c.c @@ -225,8 +225,8 @@ clear_progress_callback (guestfs_h *g) } static void -progress_callback (guestfs_h *g, void *root, - int proc_nr, int serial, uint64_t position, uint64_t total) +progress_callback_locked (guestfs_h *g ATTRIBUTE_UNUSED, void *root, + int proc_nr, int serial, uint64_t position, uint64_t total) { CAMLparam0 (); CAMLlocal5 (proc_nrv, serialv, positionv, totalv, rv); @@ -238,9 +238,7 @@ progress_callback (guestfs_h *g, void *root, value args[4] = { proc_nrv, serialv, positionv, totalv }; - caml_leave_blocking_section (); rv = caml_callbackN_exn (*(value*)root, 4, args); - caml_enter_blocking_section (); /* Callbacks shouldn't throw exceptions. There's not much we can do * except to print it. @@ -251,3 +249,17 @@ progress_callback (guestfs_h *g, void *root, CAMLreturn0; } + +static void +progress_callback (guestfs_h *g ATTRIBUTE_UNUSED, void *root, + int proc_nr, int serial, uint64_t position, uint64_t total) +{ + /* Ensure we are holding the GC lock before any GC operations are + * possible. (RHBZ#725824) + */ + caml_leave_blocking_section (); + + progress_callback_locked (g, root, proc_nr, serial, position, total); + + caml_enter_blocking_section (); +}