about summary refs log tree commit diff
path: root/src/rt/rust_upcall.cpp
diff options
context:
space:
mode:
authorBrian Anderson <banderson@mozilla.com>2012-03-21 13:17:24 -0700
committerBrian Anderson <banderson@mozilla.com>2012-03-21 19:10:31 -0700
commit6115b13dfc4b863149d55b903fd3a86f9a8d6a37 (patch)
treeae134a324bb033b3483fef88971db4a15a7c1345 /src/rt/rust_upcall.cpp
parent8a145a601eb97f9d32572fed23030bc1bc319105 (diff)
downloadrust-6115b13dfc4b863149d55b903fd3a86f9a8d6a37.tar.gz
rust-6115b13dfc4b863149d55b903fd3a86f9a8d6a37.zip
rt: Don't switch to the C stack on the upcall_new_stack fast path
Diffstat (limited to 'src/rt/rust_upcall.cpp')
-rw-r--r--src/rt/rust_upcall.cpp23
1 files changed, 5 insertions, 18 deletions
diff --git a/src/rt/rust_upcall.cpp b/src/rt/rust_upcall.cpp
index b5885cd9def..cd8b4993cbe 100644
--- a/src/rt/rust_upcall.cpp
+++ b/src/rt/rust_upcall.cpp
@@ -439,26 +439,13 @@ upcall_log_type(const type_desc *tydesc, uint8_t *data, uint32_t level) {
     UPCALL_SWITCH_STACK(&args, upcall_s_log_type);
 }
 
-struct s_new_stack_args {
-    void *result;
-    size_t stk_sz;
-    void *args_addr;
-    size_t args_sz;
-};
-
-extern "C" CDECL void
-upcall_s_new_stack(struct s_new_stack_args *args) {
-    rust_task *task = rust_task_thread::get_task();
-    args->result = task->next_stack(args->stk_sz,
-                                    args->args_addr,
-                                    args->args_sz);
-}
-
+// NB: This needs to be blazing fast. Don't switch stacks
 extern "C" CDECL void *
 upcall_new_stack(size_t stk_sz, void *args_addr, size_t args_sz) {
-    s_new_stack_args args = {NULL, stk_sz, args_addr, args_sz};
-    UPCALL_SWITCH_STACK(&args, upcall_s_new_stack);
-    return args.result;
+    rust_task *task = rust_task_thread::get_task();
+    return task->next_stack(stk_sz,
+                            args_addr,
+                            args_sz);
 }
 
 // NB: This needs to be blazing fast. Don't switch stacks