diff options
| author | Patrick Walton <pcwalton@mimiga.net> | 2011-11-14 13:52:35 -0800 |
|---|---|---|
| committer | Patrick Walton <pcwalton@mimiga.net> | 2011-11-14 16:17:08 -0800 |
| commit | ced0d4f15e11e2c74766d1055146946ded3fba51 (patch) | |
| tree | 260f3176e1b4ff422810cc21f20042a7144c84b4 /src/rt/rust_scheduler.cpp | |
| parent | 5b9f76eb7c53a28ed99d4005645485e24568ce22 (diff) | |
| download | rust-ced0d4f15e11e2c74766d1055146946ded3fba51.tar.gz rust-ced0d4f15e11e2c74766d1055146946ded3fba51.zip | |
rt: More work on morestack
Diffstat (limited to 'src/rt/rust_scheduler.cpp')
| -rw-r--r-- | src/rt/rust_scheduler.cpp | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/src/rt/rust_scheduler.cpp b/src/rt/rust_scheduler.cpp index cf3b03ee60d..08b1d871ca7 100644 --- a/src/rt/rust_scheduler.cpp +++ b/src/rt/rust_scheduler.cpp @@ -1,6 +1,7 @@ #include <stdarg.h> #include <cassert> +#include <pthread.h> #include "rust_internal.h" #include "globals.h" @@ -12,6 +13,9 @@ DWORD rust_scheduler::task_key; bool rust_scheduler::tls_initialized = false; +// Defined in arch/*/record_sp.S. +extern "C" void rust_record_sp(uintptr_t sp); + rust_scheduler::rust_scheduler(rust_kernel *kernel, rust_srv *srv, int id) : @@ -286,6 +290,8 @@ rust_scheduler::start_main_loop() { scheduled_task->state->name); place_task_in_tls(scheduled_task); + rust_record_sp(scheduled_task->stk->limit); + //pthread_setspecific(89, (void *)scheduled_task->stk->limit); interrupt_flag = 0; @@ -375,6 +381,8 @@ rust_scheduler::place_task_in_tls(rust_task *task) { rust_task * rust_scheduler::get_task() { + if (!tls_initialized) + return NULL; rust_task *task = reinterpret_cast<rust_task *> (pthread_getspecific(task_key)); assert(task && "Couldn't get the task from TLS!"); @@ -396,6 +404,8 @@ rust_scheduler::place_task_in_tls(rust_task *task) { rust_task * rust_scheduler::get_task() { + if (!tls_initialized) + return NULL; rust_task *task = reinterpret_cast<rust_task *>(TlsGetValue(task_key)); assert(task && "Couldn't get the task from TLS!"); return task; |
