X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=rts%2FGCCompact.c;h=da3c7a7c6200077f1defcc18b0d5b31832a23349;hb=220dec863e89103983698d253c6087d2f85c037f;hp=45222c3b9bfe64e207ce0d5c5c9df28585b79eb5;hpb=5a2769f0273dd389977e8283375e7920d183bdd4;p=ghc-hetmet.git diff --git a/rts/GCCompact.c b/rts/GCCompact.c index 45222c3..da3c7a7 100644 --- a/rts/GCCompact.c +++ b/rts/GCCompact.c @@ -403,9 +403,7 @@ thread_TSO (StgTSO *tso) ) { thread_(&tso->block_info.closure); } - if ( tso->blocked_exceptions != NULL ) { - thread_(&tso->blocked_exceptions); - } + thread_(&tso->blocked_exceptions); thread_(&tso->trec); @@ -630,20 +628,20 @@ thread_obj (StgInfoTable *info, StgPtr p) case TSO: return thread_TSO((StgTSO *)p); - case TVAR_WAIT_QUEUE: + case TVAR_WATCH_QUEUE: { - StgTVarWaitQueue *wq = (StgTVarWaitQueue *)p; - thread_(&wq->waiting_tso); + StgTVarWatchQueue *wq = (StgTVarWatchQueue *)p; + thread_(&wq->closure); thread_(&wq->next_queue_entry); thread_(&wq->prev_queue_entry); - return p + sizeofW(StgTVarWaitQueue); + return p + sizeofW(StgTVarWatchQueue); } case TVAR: { StgTVar *tvar = (StgTVar *)p; thread((void *)&tvar->current_value); - thread((void *)&tvar->first_wait_queue_entry); + thread((void *)&tvar->first_watch_queue_entry); return p + sizeofW(StgTVar); } @@ -652,6 +650,7 @@ thread_obj (StgInfoTable *info, StgPtr p) StgTRecHeader *trec = (StgTRecHeader *)p; thread_(&trec->enclosing_trec); thread_(&trec->current_chunk); + thread_(&trec->invariants_to_check); return p + sizeofW(StgTRecHeader); } @@ -669,6 +668,23 @@ thread_obj (StgInfoTable *info, StgPtr p) return p + sizeofW(StgTRecChunk); } + case ATOMIC_INVARIANT: + { + StgAtomicInvariant *invariant = (StgAtomicInvariant *)p; + thread_(&invariant->code); + thread_(&invariant->last_execution); + return p + sizeofW(StgAtomicInvariant); + } + + case INVARIANT_CHECK_QUEUE: + { + StgInvariantCheckQueue *queue = (StgInvariantCheckQueue *)p; + thread_(&queue->invariant); + thread_(&queue->my_execution); + thread_(&queue->next_queue_entry); + return p + sizeofW(StgInvariantCheckQueue); + } + default: barf("update_fwd: unknown/strange object %d", (int)(info->type)); return NULL;