/* -----------------------------------------------------------------------------
- * $Id: GC.c,v 1.49 1999/03/09 15:33:16 sewardj Exp $
+ * $Id: GC.c,v 1.50 1999/03/11 09:31:53 simonm Exp $
*
* (c) The GHC Team 1998-1999
*
static void revert_dead_CAFs ( void );
static rtsBool traverse_weak_ptr_list ( void );
-static void cleanup_weak_ptr_list ( void );
+static void cleanup_weak_ptr_list ( StgWeak **list );
static void scavenge_stack ( StgPtr p, StgPtr stack_end );
static void scavenge_large ( step *step );
/* Final traversal of the weak pointer list (see comment by
* cleanUpWeakPtrList below).
*/
- cleanup_weak_ptr_list();
+ cleanup_weak_ptr_list(&weak_ptr_list);
/* Now see which stable names are still alive.
*/
* of pending finalizers later on.
*/
if (flag == rtsFalse) {
+ cleanup_weak_ptr_list(&old_weak_ptr_list);
for (w = old_weak_ptr_list; w; w = w->link) {
- w->value = evacuate(w->value);
w->finalizer = evacuate(w->finalizer);
}
weak_done = rtsTrue;
-------------------------------------------------------------------------- */
static void
-cleanup_weak_ptr_list ( void )
+cleanup_weak_ptr_list ( StgWeak **list )
{
StgWeak *w, **last_w;
- last_w = &weak_ptr_list;
- for (w = weak_ptr_list; w; w = w->link) {
+ last_w = list;
+ for (w = *list; w; w = w->link) {
if (get_itbl(w)->type == EVACUATED) {
w = (StgWeak *)((StgEvacuated *)w)->evacuee;