about summary refs log tree commit diff
path: root/src/rt/rust_task.cpp
diff options
context:
space:
mode:
authorBrian Anderson <banderson@mozilla.com>2011-12-17 16:45:13 -0800
committerBrian Anderson <banderson@mozilla.com>2011-12-20 20:15:09 -0800
commitaeadc6269ef76f4425a49d892ceac7ea311ef5c1 (patch)
treee62356f817552b6430f43b6c72964325791418d1 /src/rt/rust_task.cpp
parent128621be97d425a1d19e6640c8aee4fb6fca430b (diff)
downloadrust-aeadc6269ef76f4425a49d892ceac7ea311ef5c1.tar.gz
rust-aeadc6269ef76f4425a49d892ceac7ea311ef5c1.zip
wip
Diffstat (limited to 'src/rt/rust_task.cpp')
-rw-r--r--src/rt/rust_task.cpp12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/rt/rust_task.cpp b/src/rt/rust_task.cpp
index 2e6c41a8e79..89570782942 100644
--- a/src/rt/rust_task.cpp
+++ b/src/rt/rust_task.cpp
@@ -404,6 +404,9 @@ rust_task::yield(size_t time_in_us, bool *killed) {
         *killed = true;
     }
 
+    // We're not going to need any extra stack for a while
+    clear_stack_cache();
+
     yield_timer.reset_us(time_in_us);
 
     // Return to the scheduler.
@@ -747,6 +750,15 @@ rust_task::del_stack() {
 }
 
 void
+rust_task::clear_stack_cache() {
+    A(sched, stk != NULL, "Expected to have a stack");
+    if (stk->prev != NULL) {
+        free_stk(this, stk->prev);
+        stk->prev = NULL;
+    }
+}
+
+void
 rust_task::record_stack_limit() {
     // The function prolog compares the amount of stack needed to the end of
     // the stack. As an optimization, when the frame size is less than 256