diff options
author | Simon Marlow <marlowsd@gmail.com> | 2009-02-17 13:27:57 +0000 |
---|---|---|
committer | Simon Marlow <marlowsd@gmail.com> | 2009-02-17 13:27:57 +0000 |
commit | 536942c5b15e2cd06bb274022c670b9ecbbef465 (patch) | |
tree | 3f3bfa5661161c8456114ad30cac76baa74e4871 /rts/posix/Select.c | |
parent | abb7803606acd590db525eb93351ea9899d93f72 (diff) | |
download | haskell-536942c5b15e2cd06bb274022c670b9ecbbef465.tar.gz |
cope with ThreadRelocated on the sleeping_queue
Diffstat (limited to 'rts/posix/Select.c')
-rw-r--r-- | rts/posix/Select.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/rts/posix/Select.c b/rts/posix/Select.c index bf4b7ae615..32dca96cd8 100644 --- a/rts/posix/Select.c +++ b/rts/posix/Select.c @@ -60,9 +60,15 @@ wakeUpSleepingThreads(lnat ticks) StgTSO *tso; rtsBool flag = rtsFalse; - while (sleeping_queue != END_TSO_QUEUE && - (int)(ticks - sleeping_queue->block_info.target) >= 0) { + while (sleeping_queue != END_TSO_QUEUE) { tso = sleeping_queue; + if (tso->what_next == ThreadRelocated) { + sleeping_queue = tso->_link; + continue; + } + if (((long)ticks - (long)tso->block_info.target) < 0) { + break; + } sleeping_queue = tso->_link; tso->why_blocked = NotBlocked; tso->_link = END_TSO_QUEUE; |