about summary refs log tree commit diff
path: root/src/rt
diff options
context:
space:
mode:
authorBrian Anderson <banderson@mozilla.com>2012-02-10 11:39:29 -0800
committerBrian Anderson <banderson@mozilla.com>2012-02-10 12:58:35 -0800
commit3af4b2c998b90eed5baaf033f92cf5aae06cfc4b (patch)
tree4a273a6a76f78f2366514196e6b26c2eb246a5a1 /src/rt
parent3406da49d98c93b54c8497310d7a7aeb7e9991b0 (diff)
downloadrust-3af4b2c998b90eed5baaf033f92cf5aae06cfc4b.tar.gz
rust-3af4b2c998b90eed5baaf033f92cf5aae06cfc4b.zip
rt: Call register/deregister_valgrind_stack from the stack con/destructors
Diffstat (limited to 'src/rt')
-rw-r--r--src/rt/rust_stack.h16
-rw-r--r--src/rt/rust_task.cpp3
-rw-r--r--src/rt/rust_task_thread.cpp3
3 files changed, 9 insertions, 13 deletions
diff --git a/src/rt/rust_stack.h b/src/rt/rust_stack.h
index 9f7353234d3..f310b044acb 100644
--- a/src/rt/rust_stack.h
+++ b/src/rt/rust_stack.h
@@ -20,6 +20,12 @@ const uint8_t stack_canary[] = {0xAB, 0xCD, 0xAB, 0xCD,
                                 0xAB, 0xCD, 0xAB, 0xCD};
 
 void
+register_valgrind_stack(stk_seg *stk);
+
+void
+deregister_valgrind_stack(stk_seg *stk);
+
+void
 add_stack_canary(stk_seg *stk);
 
 template <class T>
@@ -28,27 +34,23 @@ create_stack(T allocer, size_t sz) {
   size_t total_sz = sizeof(stk_seg) + sz + sizeof(stack_canary);
   stk_seg *stk = (stk_seg *)allocer->malloc(total_sz, "stack");
   memset(stk, 0, sizeof(stk_seg));
-  add_stack_canary(stk);
   stk->end = (uintptr_t) &stk->data[sz];
+  add_stack_canary(stk);
+  register_valgrind_stack(stk);
   return stk;
 }
 
 template <class T>
 void
 destroy_stack(T allocer, stk_seg *stk) {
+  deregister_valgrind_stack(stk);
   allocer->free(stk);
 }
 
 void
-register_valgrind_stack(stk_seg *stk);
-
-void
 prepare_valgrind_stack(stk_seg *stk);
 
 void
-deregister_valgrind_stack(stk_seg *stk);
-
-void
 check_stack_canary(stk_seg *stk);
 
 #endif /* RUST_STACK_H */
diff --git a/src/rt/rust_task.cpp b/src/rt/rust_task.cpp
index 1b2effce73f..65568ad8ed5 100644
--- a/src/rt/rust_task.cpp
+++ b/src/rt/rust_task.cpp
@@ -567,7 +567,6 @@ rust_task::new_stack(size_t requested_sz) {
             LOG(this, mem, "reusing existing stack");
             stk = stk->prev;
             A(thread, stk->prev == NULL, "Bogus stack ptr");
-            register_valgrind_stack(stk);
             prepare_valgrind_stack(stk);
             return;
         } else {
@@ -599,7 +598,6 @@ rust_task::new_stack(size_t requested_sz) {
     LOGPTR(thread, "stk end", new_stk->end);
 
     stk = new_stk;
-    register_valgrind_stack(stk);
     prepare_valgrind_stack(stk);
     total_stack_sz += user_stack_size(new_stk);
 }
@@ -628,7 +626,6 @@ rust_task::del_stack() {
         old_stk->prev = NULL;
     }
 
-    deregister_valgrind_stack(old_stk);
     if (delete_stack) {
         free_stack(old_stk);
         A(thread, total_stack_sz == 0, "Stack size should be 0");
diff --git a/src/rt/rust_task_thread.cpp b/src/rt/rust_task_thread.cpp
index e7a69420aa8..fbcd164707f 100644
--- a/src/rt/rust_task_thread.cpp
+++ b/src/rt/rust_task_thread.cpp
@@ -290,7 +290,6 @@ rust_task_thread::start_main_loop() {
 
     I(this, !extra_c_stack);
     if (cached_c_stack) {
-        deregister_valgrind_stack(cached_c_stack);
         destroy_stack(kernel, cached_c_stack);
         cached_c_stack = NULL;
     }
@@ -372,7 +371,6 @@ rust_task_thread::prepare_c_stack() {
     I(this, !extra_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);
     }
 }
@@ -380,7 +378,6 @@ rust_task_thread::prepare_c_stack() {
 void
 rust_task_thread::unprepare_c_stack() {
     if (extra_c_stack) {
-        deregister_valgrind_stack(extra_c_stack);
         destroy_stack(kernel, extra_c_stack);
         extra_c_stack = NULL;
     }