diff options
| author | Graydon Hoare <graydon@mozilla.com> | 2010-07-04 21:18:47 -0700 |
|---|---|---|
| committer | Graydon Hoare <graydon@mozilla.com> | 2010-07-04 21:18:47 -0700 |
| commit | 2a413070c66911e9a5211d271c704d4c7f03b49a (patch) | |
| tree | c05df70525584534cb772f6661a9fd53d8773c99 /src/rt/rust_timer.cpp | |
| parent | f2861448ab16ae06ffdc8560e9f50d6c192c0623 (diff) | |
| download | rust-2a413070c66911e9a5211d271c704d4c7f03b49a.tar.gz rust-2a413070c66911e9a5211d271c704d4c7f03b49a.zip | |
Preempt works on non-windows, just needed a little valgrind love to complete in a reasonable time.
Diffstat (limited to 'src/rt/rust_timer.cpp')
| -rw-r--r-- | src/rt/rust_timer.cpp | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/src/rt/rust_timer.cpp b/src/rt/rust_timer.cpp index 7950c02196a..997fbb51260 100644 --- a/src/rt/rust_timer.cpp +++ b/src/rt/rust_timer.cpp @@ -1,5 +1,6 @@ #include "rust_internal.h" +#include "valgrind.h" // The mechanism in this file is very crude; every domain (thread) spawns its // own secondary timer thread, and that timer thread *never idles*. It @@ -32,11 +33,15 @@ timer_loop(void *ptr) rust_timer *timer = (rust_timer *)ptr; rust_dom &dom = timer->dom; dom.log(rust_log::TIMER, "in timer 0x%" PRIxPTR, (uintptr_t)timer); + size_t ms = TIME_SLICE_IN_MS; + if (!RUNNING_ON_VALGRIND) + ms = 1; + while (!timer->exit_flag) { #if defined(__WIN32__) - Sleep(TIME_SLICE_IN_MS); + Sleep(ms); #else - usleep(TIME_SLICE_IN_MS * 1000); + usleep(ms * 1000); #endif dom.log(rust_log::TIMER, "timer 0x%" PRIxPTR @@ -65,6 +70,9 @@ rust_timer::rust_timer(rust_dom &dom) : dom(dom), exit_flag(0) pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); pthread_create(&thread, &attr, timer_loop, (void *)this); #endif + if (RUNNING_ON_VALGRIND) { + usleep(10000); + } } rust_timer::~rust_timer() |
