diff options
author | Simon Marlow <simonmarhaskell@gmail.com> | 2008-04-16 23:39:51 +0000 |
---|---|---|
committer | Simon Marlow <simonmarhaskell@gmail.com> | 2008-04-16 23:39:51 +0000 |
commit | 04cddd339c000df6d02c90ce59dbffa58d2fe166 (patch) | |
tree | 4ba138d182f71f2751daeb3cb77c0fc86cf1110f /rts/Schedule.h | |
parent | 9de1ad504a0a12dabd42b206f06ca04fa0e7009a (diff) | |
download | haskell-04cddd339c000df6d02c90ce59dbffa58d2fe166.tar.gz |
Add a write barrier to the TSO link field (#1589)
Diffstat (limited to 'rts/Schedule.h')
-rw-r--r-- | rts/Schedule.h | 24 |
1 files changed, 9 insertions, 15 deletions
diff --git a/rts/Schedule.h b/rts/Schedule.h index a4a95f3c34..32b7e59a5e 100644 --- a/rts/Schedule.h +++ b/rts/Schedule.h @@ -186,11 +186,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 +202,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 +216,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 +230,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 +244,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 +293,5 @@ emptyThreadQueues(Capability *cap) #endif /* !IN_STG_CODE */ -INLINE_HEADER void -dirtyTSO (StgTSO *tso) -{ - tso->flags |= TSO_DIRTY; -} - #endif /* SCHEDULE_H */ |