diff options
author | Damien Doligez <damien.doligez-inria.fr> | 2002-07-30 14:00:36 +0000 |
---|---|---|
committer | Damien Doligez <damien.doligez-inria.fr> | 2002-07-30 14:00:36 +0000 |
commit | a0552161a67664a11b3a0581e5d890f504ab7946 (patch) | |
tree | 5fe7e74f9e8d876c63e354bd71211df40bed9434 | |
parent | a839b74ddad21f5f2a9c8785de02504d9802d50a (diff) |
boucler si pointeur faible sur lazy recursif, sinon c'est pas correct
git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@5059 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
-rw-r--r-- | byterun/major_gc.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/byterun/major_gc.c b/byterun/major_gc.c index cc1059b77..c5f792470 100644 --- a/byterun/major_gc.c +++ b/byterun/major_gc.c @@ -189,11 +189,14 @@ static void mark_slice (long work) sz = Wosize_hd (hd); for (i = 1; i < sz; i++){ curfield = Field (cur, i); + weak_again: if (curfield != 0 && Is_block (curfield) && Is_in_heap (curfield)){ if (Tag_val (curfield) == Forward_tag){ - Field (cur, i) = Forward_val (curfield); + curfield = Forward_val (curfield); + Field (cur, i) = curfield; + goto weak_again; } - else if (Is_white_val (curfield)){ + if (Is_white_val (curfield)){ Field (cur, i) = 0; } } |