diff options
| author | Brian Anderson <banderson@mozilla.com> | 2013-04-23 15:16:04 -0700 |
|---|---|---|
| committer | Brian Anderson <banderson@mozilla.com> | 2013-04-23 19:19:32 -0700 |
| commit | e944c7dadeed48b199df6891603ae063233ec5a8 (patch) | |
| tree | bb1fe84012278b82d45eb7c6544da42f3be17285 /src/rt/rust_upcall.cpp | |
| parent | 8708e0c099400f363a5b95806847bd12d780000a (diff) | |
| parent | 2a819ae465c5f375df00ead0b3f4c9009da23f25 (diff) | |
| download | rust-e944c7dadeed48b199df6891603ae063233ec5a8.tar.gz rust-e944c7dadeed48b199df6891603ae063233ec5a8.zip | |
Merge remote-tracking branch 'brson/io'
This also reverts some changes to TLS that were leaking memory. Conflicts: src/libcore/rt/uv/net.rs src/libcore/task/local_data_priv.rs src/libcore/unstable/lang.rs
Diffstat (limited to 'src/rt/rust_upcall.cpp')
| -rw-r--r-- | src/rt/rust_upcall.cpp | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/src/rt/rust_upcall.cpp b/src/rt/rust_upcall.cpp index e524e6de859..e7a25ba87ea 100644 --- a/src/rt/rust_upcall.cpp +++ b/src/rt/rust_upcall.cpp @@ -287,7 +287,13 @@ upcall_rust_personality(int version, s_rust_personality_args args = {(_Unwind_Reason_Code)0, version, actions, exception_class, ue_header, context}; - rust_task *task = rust_get_current_task(); + rust_task *task = rust_try_get_current_task(); + + if (task == NULL) { + // Assuming we're running with the new scheduler + upcall_s_rust_personality(&args); + return args.retval; + } // The personality function is run on the stack of the // last function that threw or landed, which is going @@ -324,8 +330,12 @@ upcall_del_stack() { // needs to acquire the value of the stack pointer extern "C" CDECL void upcall_reset_stack_limit() { - rust_task *task = rust_get_current_task(); - task->reset_stack_limit(); + rust_task *task = rust_try_get_current_task(); + if (task != NULL) { + task->reset_stack_limit(); + } else { + // We must be in a newsched task + } } // |
