X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=rts%2Fsm%2FMarkWeak.c;h=eca5c54b138fc4b7f658936182b6b9f36a0739c5;hb=fac738e582dcaca1575f5291c83910db01d25284;hp=bfa78e5836da74ce3e39dbab1f01535015981b20;hpb=d5bd3e829c47c03157cf41cad581d2df44dfd81b;p=ghc-hetmet.git diff --git a/rts/sm/MarkWeak.c b/rts/sm/MarkWeak.c index bfa78e5..eca5c54 100644 --- a/rts/sm/MarkWeak.c +++ b/rts/sm/MarkWeak.c @@ -109,7 +109,7 @@ traverseWeakPtrList(void) /* doesn't matter where we evacuate values/finalizers to, since * these pointers are treated as roots (iff the keys are alive). */ - gct->evac_gen = 0; + gct->evac_step = 0; last_w = &old_weak_ptr_list; for (w = old_weak_ptr_list; w != NULL; w = next_w) { @@ -137,8 +137,8 @@ traverseWeakPtrList(void) if (new != NULL) { w->key = new; // evacuate the value and finalizer - w->value = evacuate(w->value); - w->finalizer = evacuate(w->finalizer); + evacuate(&w->value); + evacuate(&w->finalizer); // remove this weak ptr from the old_weak_ptr list *last_w = w->link; // and put it on the new weak ptr list @@ -169,7 +169,7 @@ traverseWeakPtrList(void) */ if (flag == rtsFalse) { for (w = old_weak_ptr_list; w; w = w->link) { - w->finalizer = evacuate(w->finalizer); + evacuate(&w->finalizer); } // Next, move to the WeakThreads stage after fully @@ -241,7 +241,8 @@ traverseWeakPtrList(void) StgTSO *t, *tmp, *next; for (t = old_all_threads; t != END_TSO_QUEUE; t = next) { next = t->global_link; - tmp = (StgTSO *)evacuate((StgClosure *)t); + tmp = t; + evacuate((StgClosure **)&tmp); tmp->global_link = resurrected_threads; resurrected_threads = tmp; } @@ -301,7 +302,8 @@ traverseBlackholeQueue (void) continue; } } - t = (StgTSO *)evacuate((StgClosure *)t); + tmp = t; + evacuate((StgClosure **)&tmp); if (prev) prev->link = t; flag = rtsTrue; } @@ -324,14 +326,15 @@ traverseBlackholeQueue (void) void markWeakPtrList ( void ) { - StgWeak *w, **last_w; + StgWeak *w, **last_w, *tmp; last_w = &weak_ptr_list; for (w = weak_ptr_list; w; w = w->link) { // w might be WEAK, EVACUATED, or DEAD_WEAK (actually CON_STATIC) here ASSERT(w->header.info == &stg_DEAD_WEAK_info || get_itbl(w)->type == WEAK || get_itbl(w)->type == EVACUATED); - w = (StgWeak *)evacuate((StgClosure *)w); + tmp = w; + evacuate((StgClosure **)&tmp); *last_w = w; last_w = &(w->link); }