From dac58941c42008a8a2406fb81218fa3018f72772 Mon Sep 17 00:00:00 2001 From: sewardj <unknown> Date: Tue, 9 Mar 1999 15:33:16 +0000 Subject: [PATCH] [project @ 1999-03-09 15:33:16 by sewardj] Handle CAF_UNENTERED (ie, reverted) in scavenge_mut_once_list --- ghc/rts/GC.c | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/ghc/rts/GC.c b/ghc/rts/GC.c index 6a54291a3fa9..37a5cb177eaf 100644 --- a/ghc/rts/GC.c +++ b/ghc/rts/GC.c @@ -1,5 +1,5 @@ /* ----------------------------------------------------------------------------- - * $Id: GC.c,v 1.48 1999/03/09 14:24:43 sewardj Exp $ + * $Id: GC.c,v 1.49 1999/03/09 15:33:16 sewardj Exp $ * * (c) The GHC Team 1998-1999 * @@ -2036,6 +2036,18 @@ scavenge_mut_once_list(generation *gen) } continue; + case CAF_UNENTERED: + { + StgCAF *caf = (StgCAF *)p; + caf->body = evacuate(caf->body); + if (failed_to_evac) { + failed_to_evac = rtsFalse; + p->mut_link = new_list; + new_list = p; + } + } + continue; + default: /* shouldn't have anything else on the mutables list */ barf("scavenge_mut_once_list: strange object?"); @@ -2569,6 +2581,7 @@ void RevertCAFs(void) caf->value = stgCast(StgClosure*,0xdeadbeef); caf->link = stgCast(StgCAF*,0xdeadbeef); } + enteredCAFs = END_CAF_LIST; } void revert_dead_CAFs(void) @@ -2576,8 +2589,9 @@ void revert_dead_CAFs(void) StgCAF* caf = enteredCAFs; enteredCAFs = END_CAF_LIST; while (caf != END_CAF_LIST) { - StgCAF* next = caf->link; - StgCAF* new = (StgCAF*)isAlive((StgClosure*)caf); + StgCAF *next, *new; + next = caf->link; + new = (StgCAF*)isAlive((StgClosure*)caf); if (new) { new->link = enteredCAFs; enteredCAFs = new; -- GitLab