STATIC_INLINE void
evacuate_large(StgPtr p)
{
- bdescr *bd = Bdescr(p);
+ bdescr *bd;
generation *gen, *new_gen;
gen_workspace *ws;
+ bd = Bdescr(p);
gen = bd->gen;
ACQUIRE_SPIN_LOCK(&gen->sync_large_objects);
/* link it on to the evacuated large object list of the destination gen
*/
- new_gen = gen->to;
+ new_gen = bd->dest;
if (new_gen < gct->evac_gen) {
if (gct->eager_promotion) {
new_gen = gct->evac_gen;
} while (info_ptr == (W_)&stg_WHITEHOLE_info);
// make sure someone else didn't get here first...
- if (IS_FORWARDING_PTR(p) ||
+ if (IS_FORWARDING_PTR(info_ptr) ||
INFO_PTR_TO_STRUCT(info_ptr)->type != THUNK_SELECTOR) {
// v. tricky now. The THUNK_SELECTOR has been evacuated
// by another thread, and is now either a forwarding ptr or IND.