about summary refs log tree commit diff
diff options
context:
space:
mode:
authorBrian Anderson <banderson@mozilla.com>2012-02-10 11:37:24 -0800
committerBrian Anderson <banderson@mozilla.com>2012-02-10 12:58:35 -0800
commit3406da49d98c93b54c8497310d7a7aeb7e9991b0 (patch)
tree70acdd2241043d817d35537f5dfd1b4a1a0a5452
parentc42492e6aa481a65e4919b5ab26f4b0936556fc0 (diff)
downloadrust-3406da49d98c93b54c8497310d7a7aeb7e9991b0.tar.gz
rust-3406da49d98c93b54c8497310d7a7aeb7e9991b0.zip
rt: Extract prepare_valgrind_stack from register_valgrind_stack
-rw-r--r--src/rt/rust_stack.cpp4
-rw-r--r--src/rt/rust_stack.h3
-rw-r--r--src/rt/rust_task.cpp2
-rw-r--r--src/rt/rust_task_thread.cpp1
4 files changed, 10 insertions, 0 deletions
diff --git a/src/rt/rust_stack.cpp b/src/rt/rust_stack.cpp
index 940f6acf196..84e4215ac67 100644
--- a/src/rt/rust_stack.cpp
+++ b/src/rt/rust_stack.cpp
@@ -8,6 +8,10 @@ register_valgrind_stack(stk_seg *stk) {
     stk->valgrind_id =
         VALGRIND_STACK_REGISTER(&stk->data[0],
                                 stk->end);
+}
+
+void
+prepare_valgrind_stack(stk_seg *stk) {
 #ifndef NVALGRIND
     // Establish that the stack is accessible.  This must be done when reusing
     // old stack segments, since the act of popping the stack previously
diff --git a/src/rt/rust_stack.h b/src/rt/rust_stack.h
index 8d102cb14aa..9f7353234d3 100644
--- a/src/rt/rust_stack.h
+++ b/src/rt/rust_stack.h
@@ -43,6 +43,9 @@ void
 register_valgrind_stack(stk_seg *stk);
 
 void
+prepare_valgrind_stack(stk_seg *stk);
+
+void
 deregister_valgrind_stack(stk_seg *stk);
 
 void
diff --git a/src/rt/rust_task.cpp b/src/rt/rust_task.cpp
index c290e2ade13..1b2effce73f 100644
--- a/src/rt/rust_task.cpp
+++ b/src/rt/rust_task.cpp
@@ -568,6 +568,7 @@ rust_task::new_stack(size_t requested_sz) {
             stk = stk->prev;
             A(thread, stk->prev == NULL, "Bogus stack ptr");
             register_valgrind_stack(stk);
+            prepare_valgrind_stack(stk);
             return;
         } else {
             LOG(this, mem, "existing stack is not big enough");
@@ -599,6 +600,7 @@ rust_task::new_stack(size_t requested_sz) {
 
     stk = new_stk;
     register_valgrind_stack(stk);
+    prepare_valgrind_stack(stk);
     total_stack_sz += user_stack_size(new_stk);
 }
 
diff --git a/src/rt/rust_task_thread.cpp b/src/rt/rust_task_thread.cpp
index 73e62dee6e5..e7a69420aa8 100644
--- a/src/rt/rust_task_thread.cpp
+++ b/src/rt/rust_task_thread.cpp
@@ -373,6 +373,7 @@ rust_task_thread::prepare_c_stack() {
     if (!cached_c_stack) {
         cached_c_stack = create_stack(kernel, C_STACK_SIZE);
         register_valgrind_stack(cached_c_stack);
+        prepare_valgrind_stack(cached_c_stack);
     }
 }