diff options
Diffstat (limited to 'byterun/weak.c')
-rw-r--r-- | byterun/weak.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/byterun/weak.c b/byterun/weak.c index efd23c465d..0cea2a6dc3 100644 --- a/byterun/weak.c +++ b/byterun/weak.c @@ -19,6 +19,7 @@ #include "alloc.h" #include "fail.h" +#include "major_gc.h" #include "memory.h" #include "mlvalues.h" @@ -113,7 +114,11 @@ CAMLprim value caml_weak_get_copy (value ar, value n) if (Tag_val (v) < No_scan_tag){ mlsize_t i; for (i = 0; i < Wosize_val (v); i++){ - Modify (&Field (elt, i), Field (v, i)); + value f = Field (v, i); + if (caml_gc_phase == Phase_mark && Is_block (f) && Is_in_heap (f)){ + caml_darken (f, NULL); + } + Modify (&Field (elt, i), f); } }else{ memmove (Bp_val (elt), Bp_val (v), Bosize_val (v)); |