about summary refs log tree commit diff
path: root/src/rt/rust_kernel.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/rt/rust_kernel.cpp')
-rw-r--r--src/rt/rust_kernel.cpp25
1 files changed, 24 insertions, 1 deletions
diff --git a/src/rt/rust_kernel.cpp b/src/rt/rust_kernel.cpp
index 9f128c3ec92..ae603379a17 100644
--- a/src/rt/rust_kernel.cpp
+++ b/src/rt/rust_kernel.cpp
@@ -144,7 +144,19 @@ void
 rust_kernel::start_kernel_loop() {
     while (_interrupt_kernel_loop == false) {
         pump_message_queues();
-        sync::yield();
+
+        // FIXME: this is a complete hack to make the testsuite finish in a
+        // sane time when executing under valgrind. The whole message-loop
+        // system here needs replacement with an OS-level event-queue such
+        // that actually wait on inter-thread notices, rather than
+        // busy-waiting.
+
+        size_t ms = TIME_SLICE_IN_MS;
+#if defined(__WIN32__)
+        Sleep(ms);
+#else
+        usleep(ms * 1000);
+#endif
     }
 }
 
@@ -208,3 +220,14 @@ rust_kernel::free_handles(hash_map<T*, rust_handle<T>* > &map) {
         delete value;
     }
 }
+
+//
+// Local Variables:
+// mode: C++
+// fill-column: 78;
+// indent-tabs-mode: nil
+// c-basic-offset: 4
+// buffer-file-coding-system: utf-8-unix
+// compile-command: "make -k -C .. 2>&1 | sed -e 's/\\/x\\//x:\\//g'";
+// End:
+//