aboutsummaryrefslogtreecommitdiff
path: root/src/rt
diff options
context:
space:
mode:
authorMichael Bebenita <[email protected]>2010-08-16 18:44:26 -0700
committerMichael Bebenita <[email protected]>2010-08-16 18:44:26 -0700
commit5d98a311e41316635327479278e3d41be54771d1 (patch)
tree8a6ff71650223b2b6c452074308d4d6b4d2bea81 /src/rt
parentUn-xfailed working tests. (diff)
downloadrust-5d98a311e41316635327479278e3d41be54771d1.tar.xz
rust-5d98a311e41316635327479278e3d41be54771d1.zip
Putting out the burning tree on Windows. Turns out you can completely starve threads by not yielding on windows/vmware, really weird.
Diffstat (limited to 'src/rt')
-rw-r--r--src/rt/rust_dom.cpp6
-rw-r--r--src/rt/sync/sync.cpp2
-rw-r--r--src/rt/sync/timer.cpp2
3 files changed, 5 insertions, 5 deletions
diff --git a/src/rt/rust_dom.cpp b/src/rt/rust_dom.cpp
index 1d067560..e49eeb22 100644
--- a/src/rt/rust_dom.cpp
+++ b/src/rt/rust_dom.cpp
@@ -400,9 +400,9 @@ rust_dom::start_main_loop()
rust_task *scheduled_task = schedule_task();
- // If we cannot schedule a task because all other live tasks
- // are blocked, yield and hopefully some progress is made in
- // other domains.
+ // The scheduler busy waits until a task is available for scheduling.
+ // Eventually we'll want a smarter way to do this, perhaps sleep
+ // for a minimum amount of time.
if (scheduled_task == NULL) {
if (_log.is_tracing(rust_log::TASK)) {
diff --git a/src/rt/sync/sync.cpp b/src/rt/sync/sync.cpp
index eba51a49..09a6f291 100644
--- a/src/rt/sync/sync.cpp
+++ b/src/rt/sync/sync.cpp
@@ -5,7 +5,7 @@ void sync::yield() {
#ifdef __APPLE__
pthread_yield_np();
#elif __WIN32__
-
+ Sleep(1);
#else
pthread_yield();
#endif
diff --git a/src/rt/sync/timer.cpp b/src/rt/sync/timer.cpp
index e45dd633..0487b397 100644
--- a/src/rt/sync/timer.cpp
+++ b/src/rt/sync/timer.cpp
@@ -6,12 +6,12 @@
#endif
timer::timer() {
- reset(0);
#if __WIN32__
uint64_t ticks_per_second;
QueryPerformanceFrequency((LARGE_INTEGER *)&ticks_per_second);
_ticks_per_us = ticks_per_second / 1000000;
#endif
+ reset(0);
}
void