about summary refs log tree commit diff
path: root/src/rt/rust_timer.cpp
diff options
context:
space:
mode:
authorBrian Anderson <banderson@mozilla.com>2012-02-01 15:50:39 -0800
committerBrian Anderson <banderson@mozilla.com>2012-02-01 16:05:17 -0800
commit5c8993854495a35a182182b00d472e08be796a6b (patch)
treebf4fddeb5135ba862651a004b44834974ef47bec /src/rt/rust_timer.cpp
parentd24eb58a094b73f1b22cdc7ea5087b59f1d1b574 (diff)
downloadrust-5c8993854495a35a182182b00d472e08be796a6b.tar.gz
rust-5c8993854495a35a182182b00d472e08be796a6b.zip
rt: Remove rust_timer. Unused
Diffstat (limited to 'src/rt/rust_timer.cpp')
-rw-r--r--src/rt/rust_timer.cpp90
1 files changed, 0 insertions, 90 deletions
diff --git a/src/rt/rust_timer.cpp b/src/rt/rust_timer.cpp
deleted file mode 100644
index ffa98766763..00000000000
--- a/src/rt/rust_timer.cpp
+++ /dev/null
@@ -1,90 +0,0 @@
-#include "rust_internal.h"
-#include "vg/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
-// sleep-loops interrupting the domain.
-//
-// This will need replacement, particularly in order to achieve an actual
-// state of idling when we're waiting on the outside world.  Though that might
-// be as simple as making a secondary waitable start/stop-timer signalling
-// system between the domain and its timer thread. We'll see.
-//
-// On the other hand, we don't presently have the ability to idle domains *at
-// all*, and without the timer thread we're unable to otherwise preempt rust
-// tasks. So ... one step at a time.
-//
-// The implementation here is "lockless" in the sense that it only involves
-// one-directional signaling of one-shot events, so the event initiator just
-// writes a nonzero word to a prederermined location and waits for the
-// receiver to see it show up in their memory.
-
-#if defined(__WIN32__)
-static DWORD WINAPI
-#elif defined(__GNUC__)
-static void *
-#else
-#error "Platform not supported"
-#endif
-timer_loop(void *ptr) {
-    // We were handed the rust_timer that owns us.
-    rust_timer *timer = (rust_timer *)ptr;
-    rust_scheduler *sched = timer->sched;
-    DLOG(sched, timer, "in timer 0x%" PRIxPTR, (uintptr_t)timer);
-    size_t ms = TIME_SLICE_IN_MS;
-
-    while (!timer->exit_flag) {
-#if defined(__WIN32__)
-        Sleep(ms);
-#else
-        usleep(ms * 1000);
-#endif
-        DLOG(sched, timer, "timer 0x%" PRIxPTR
-        " interrupting schedain 0x%" PRIxPTR, (uintptr_t) timer,
-                 (uintptr_t) sched);
-        sched->interrupt_flag = 1;
-    }
-#if defined(__WIN32__)
-    ExitThread(0);
-#else
-    pthread_exit(NULL);
-#endif
-    return 0;
-}
-
-rust_timer::rust_timer(rust_scheduler *sched) :
-    sched(sched), exit_flag(0) {
-    DLOG(sched, timer, "creating timer for domain 0x%" PRIxPTR, sched);
-#if defined(__WIN32__)
-    thread = CreateThread(NULL, 0, timer_loop, this, 0, NULL);
-    sched->kernel->win32_require("CreateThread", thread != NULL);
-    if (RUNNING_ON_VALGRIND)
-        Sleep(10);
-#else
-    pthread_attr_init(&attr);
-    pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
-    pthread_create(&thread, &attr, timer_loop, (void *)this);
-#endif
-}
-
-rust_timer::~rust_timer() {
-    exit_flag = 1;
-#if defined(__WIN32__)
-    sched->kernel->win32_require("WaitForSingleObject",
-                               WaitForSingleObject(thread, INFINITE) ==
-                               WAIT_OBJECT_0);
-#else
-    pthread_join(thread, NULL);
-#endif
-}
-
-//
-// 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 $RBUILD 2>&1 | sed -e 's/\\/x\\//x:\\//g'";
-// End:
-//