X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=rts%2Fsm%2FMarkWeak.c;fp=rts%2Fsm%2FMarkWeak.c;h=9d47cdedebd1164f2a7fe4a2ca162c8eb33cc05d;hp=3faaf0edfe032a500793a4d4c2e699679e024be4;hb=04cddd339c000df6d02c90ce59dbffa58d2fe166;hpb=9de1ad504a0a12dabd42b206f06ca04fa0e7009a diff --git a/rts/sm/MarkWeak.c b/rts/sm/MarkWeak.c index 3faaf0e..9d47cde 100644 --- a/rts/sm/MarkWeak.c +++ b/rts/sm/MarkWeak.c @@ -200,7 +200,7 @@ traverseWeakPtrList(void) ASSERT(get_itbl(t)->type == TSO); switch (t->what_next) { case ThreadRelocated: - next = t->link; + next = t->_link; *prev = next; continue; case ThreadKilled: @@ -258,7 +258,7 @@ traverseWeakPtrList(void) */ { StgTSO **pt; - for (pt = &blackhole_queue; *pt != END_TSO_QUEUE; pt = &((*pt)->link)) { + for (pt = &blackhole_queue; *pt != END_TSO_QUEUE; pt = &((*pt)->_link)) { *pt = (StgTSO *)isAlive((StgClosure *)*pt); ASSERT(*pt != NULL); } @@ -291,7 +291,7 @@ traverseBlackholeQueue (void) flag = rtsFalse; prev = NULL; - for (t = blackhole_queue; t != END_TSO_QUEUE; prev=t, t = t->link) { + for (t = blackhole_queue; t != END_TSO_QUEUE; prev=t, t = t->_link) { // if the thread is not yet alive... if (! (tmp = (StgTSO *)isAlive((StgClosure*)t))) { // if the closure it is blocked on is either (a) a @@ -305,7 +305,9 @@ traverseBlackholeQueue (void) } tmp = t; evacuate((StgClosure **)&tmp); - if (prev) prev->link = t; + if (prev) prev->_link = t; + // no write barrier when on the blackhole queue, + // because we traverse the whole queue on every GC. flag = rtsTrue; } }