[project @ 2003-12-22 16:27:10 by simonmar]
Fix threaded RTS problem that is currently causing the conc007 test to
loop indefinitely. Comment from the source regarding this change:
/* Major bogosity:
*
* In the threaded RTS, we can't set the virtual timer because the
* thread which has the virtual timer might be sitting waiting for a
* capability, and the virtual timer only ticks in CPU time.
*
* So, possible solutions:
*
* (1) tick in realtime. Not very good, because this ticker is used for
* profiling, and this will give us unreliable time profiling
* results. Furthermore, this requires picking a single OS thread
* to be the timekeeper, which is a bad idea because the thread in
* question might just be making a temporary call into Haskell land.
*
* (2) save/restore the virtual timer around excursions into STG land.
* Sounds great, but I tried it and the resolution of the virtual timer
* isn't good enough (on Linux) - most of our excursions fall
* within the timer's resolution and we never make any progress.
*
* (3) have a virtual timer in every OS thread. Might be reasonable,
* because most of the time there is only ever one of these
* threads running, so it approximates a single virtual timer.
* But still quite bogus (and I got crashes when I tried this).
*
* For now, we're using (1), but this needs a better solution. --SDM
*/