X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=rts%2FSchedule.h;h=59bdb9e999045b40abb0a416002539c7e59426c8;hb=78260da4deee97a866ba83f8d73a8284b371f405;hp=a4a95f3c34c681ebb494b902fff72af41e05063a;hpb=79c9408712af3ddd6340b0b5785ffde34f830042;p=ghc-hetmet.git diff --git a/rts/Schedule.h b/rts/Schedule.h index a4a95f3..59bdb9e 100644 --- a/rts/Schedule.h +++ b/rts/Schedule.h @@ -133,11 +133,6 @@ extern StgTSO *RTS_VAR(sleeping_queue); #endif #endif -/* Linked list of all threads. - * Locks required : sched_mutex - */ -extern StgTSO *RTS_VAR(all_threads); - /* Set to rtsTrue if there are threads on the blackhole_queue, and * it is possible that one or more of them may be available to run. * This flag is set to rtsFalse after we've checked the queue, and @@ -159,6 +154,7 @@ void interruptStgRts (void); nat run_queue_len (void); void resurrectThreads (StgTSO *); +void performPendingThrowTos (StgTSO *); void printAllThreads(void); @@ -186,11 +182,11 @@ void print_bqe (StgBlockingQueueElement *bqe); INLINE_HEADER void appendToRunQueue (Capability *cap, StgTSO *tso) { - ASSERT(tso->link == END_TSO_QUEUE); + ASSERT(tso->_link == END_TSO_QUEUE); if (cap->run_queue_hd == END_TSO_QUEUE) { cap->run_queue_hd = tso; } else { - cap->run_queue_tl->link = tso; + setTSOLink(cap, cap->run_queue_tl, tso); } cap->run_queue_tl = tso; } @@ -202,7 +198,7 @@ appendToRunQueue (Capability *cap, StgTSO *tso) INLINE_HEADER void pushOnRunQueue (Capability *cap, StgTSO *tso) { - tso->link = cap->run_queue_hd; + setTSOLink(cap, tso, cap->run_queue_hd); cap->run_queue_hd = tso; if (cap->run_queue_tl == END_TSO_QUEUE) { cap->run_queue_tl = tso; @@ -216,8 +212,8 @@ popRunQueue (Capability *cap) { StgTSO *t = cap->run_queue_hd; ASSERT(t != END_TSO_QUEUE); - cap->run_queue_hd = t->link; - t->link = END_TSO_QUEUE; + cap->run_queue_hd = t->_link; + t->_link = END_TSO_QUEUE; // no write barrier req'd if (cap->run_queue_hd == END_TSO_QUEUE) { cap->run_queue_tl = END_TSO_QUEUE; } @@ -230,11 +226,11 @@ popRunQueue (Capability *cap) INLINE_HEADER void appendToBlockedQueue(StgTSO *tso) { - ASSERT(tso->link == END_TSO_QUEUE); + ASSERT(tso->_link == END_TSO_QUEUE); if (blocked_queue_hd == END_TSO_QUEUE) { blocked_queue_hd = tso; } else { - blocked_queue_tl->link = tso; + setTSOLink(&MainCapability, blocked_queue_tl, tso); } blocked_queue_tl = tso; } @@ -244,11 +240,11 @@ appendToBlockedQueue(StgTSO *tso) INLINE_HEADER void appendToWakeupQueue (Capability *cap, StgTSO *tso) { - ASSERT(tso->link == END_TSO_QUEUE); + ASSERT(tso->_link == END_TSO_QUEUE); if (cap->wakeup_queue_hd == END_TSO_QUEUE) { cap->wakeup_queue_hd = tso; } else { - cap->wakeup_queue_tl->link = tso; + setTSOLink(cap, cap->wakeup_queue_tl, tso); } cap->wakeup_queue_tl = tso; } @@ -293,11 +289,5 @@ emptyThreadQueues(Capability *cap) #endif /* !IN_STG_CODE */ -INLINE_HEADER void -dirtyTSO (StgTSO *tso) -{ - tso->flags |= TSO_DIRTY; -} - #endif /* SCHEDULE_H */