X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=rts%2Fsm%2FGCAux.c;h=825d0f9a3edeb06831c6e571794589aa9dc76461;hp=df47e187949943c7b86f123463bc1567e9165063;hb=4e79709df545c16812b85f2c27ab3411f5a7b54f;hpb=a4e09e8f27b81e915b128ef244c7b0d082bfb89a diff --git a/rts/sm/GCAux.c b/rts/sm/GCAux.c index df47e18..825d0f9 100644 --- a/rts/sm/GCAux.c +++ b/rts/sm/GCAux.c @@ -70,7 +70,15 @@ isAlive(StgClosure *p) return p; } - info = get_itbl(q); + info = q->header.info; + + if (IS_FORWARDING_PTR(info)) { + // alive! + return (StgClosure*)UN_FORWARDING_PTR(info); + } + + info = INFO_PTR_TO_STRUCT(info); + switch (info->type) { case IND: @@ -82,10 +90,6 @@ isAlive(StgClosure *p) p = ((StgInd *)q)->indirectee; continue; - case EVACUATED: - // alive! - return ((StgEvacuated *)q)->evacuee; - case TSO: if (((StgTSO *)q)->what_next == ThreadRelocated) { p = (StgClosure *)((StgTSO *)q)->_link;