summaryrefslogtreecommitdiff
path: root/rts/posix/Select.c
diff options
context:
space:
mode:
authorSimon Marlow <simonmarhaskell@gmail.com>2008-04-16 23:39:51 +0000
committerSimon Marlow <simonmarhaskell@gmail.com>2008-04-16 23:39:51 +0000
commit04cddd339c000df6d02c90ce59dbffa58d2fe166 (patch)
tree4ba138d182f71f2751daeb3cb77c0fc86cf1110f /rts/posix/Select.c
parent9de1ad504a0a12dabd42b206f06ca04fa0e7009a (diff)
downloadhaskell-04cddd339c000df6d02c90ce59dbffa58d2fe166.tar.gz
Add a write barrier to the TSO link field (#1589)
Diffstat (limited to 'rts/posix/Select.c')
-rw-r--r--rts/posix/Select.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/rts/posix/Select.c b/rts/posix/Select.c
index 8af57bac6f..ae9c717a9a 100644
--- a/rts/posix/Select.c
+++ b/rts/posix/Select.c
@@ -63,9 +63,9 @@ wakeUpSleepingThreads(lnat ticks)
while (sleeping_queue != END_TSO_QUEUE &&
(int)(ticks - sleeping_queue->block_info.target) >= 0) {
tso = sleeping_queue;
- sleeping_queue = tso->link;
+ sleeping_queue = tso->_link;
tso->why_blocked = NotBlocked;
- tso->link = END_TSO_QUEUE;
+ tso->_link = END_TSO_QUEUE;
IF_DEBUG(scheduler,debugBelch("Waking up sleeping thread %lu\n", (unsigned long)tso->id));
// MainCapability: this code is !THREADED_RTS
pushOnRunQueue(&MainCapability,tso);
@@ -139,7 +139,7 @@ awaitEvent(rtsBool wait)
FD_ZERO(&wfd);
for(tso = blocked_queue_hd; tso != END_TSO_QUEUE; tso = next) {
- next = tso->link;
+ next = tso->_link;
/* On FreeBSD FD_SETSIZE is unsigned. Cast it to signed int
* in order to switch off the 'comparison between signed and
@@ -243,7 +243,7 @@ awaitEvent(rtsBool wait)
prev = NULL;
if (select_succeeded || unblock_all) {
for(tso = blocked_queue_hd; tso != END_TSO_QUEUE; tso = next) {
- next = tso->link;
+ next = tso->_link;
switch (tso->why_blocked) {
case BlockedOnRead:
ready = unblock_all || FD_ISSET(tso->block_info.fd, &rfd);
@@ -258,13 +258,13 @@ awaitEvent(rtsBool wait)
if (ready) {
IF_DEBUG(scheduler,debugBelch("Waking up blocked thread %lu\n", (unsigned long)tso->id));
tso->why_blocked = NotBlocked;
- tso->link = END_TSO_QUEUE;
+ tso->_link = END_TSO_QUEUE;
pushOnRunQueue(&MainCapability,tso);
} else {
if (prev == NULL)
blocked_queue_hd = tso;
else
- prev->link = tso;
+ setTSOLink(&MainCapability, prev, tso);
prev = tso;
}
}
@@ -272,7 +272,7 @@ awaitEvent(rtsBool wait)
if (prev == NULL)
blocked_queue_hd = blocked_queue_tl = END_TSO_QUEUE;
else {
- prev->link = END_TSO_QUEUE;
+ prev->_link = END_TSO_QUEUE;
blocked_queue_tl = prev;
}
}