about summary refs log tree commit diff
path: root/src/libstd/sys/common
diff options
context:
space:
mode:
authorAndrea Canciani <ranma42@gmail.com>2015-09-22 08:58:47 +0200
committerAndrea Canciani <ranma42@gmail.com>2015-09-22 11:07:27 +0200
commitcf102966dedaccb62c6691adb589352d2bd2629f (patch)
treef0904abf8d831205fb81af3644afa4446acbcab8 /src/libstd/sys/common
parentf07f4ef74366f70554cb0f2cef590e76bfd55791 (diff)
downloadrust-cf102966dedaccb62c6691adb589352d2bd2629f.tar.gz
rust-cf102966dedaccb62c6691adb589352d2bd2629f.zip
Simplify inner_try in std::rt::unwind::try
Resolve the TLS PANICKING variable just once and re-use it as needed.
Diffstat (limited to 'src/libstd/sys/common')
-rw-r--r--src/libstd/sys/common/unwind/mod.rs20
1 files changed, 11 insertions, 9 deletions
diff --git a/src/libstd/sys/common/unwind/mod.rs b/src/libstd/sys/common/unwind/mod.rs
index 738681c3cfe..8899d1b04d8 100644
--- a/src/libstd/sys/common/unwind/mod.rs
+++ b/src/libstd/sys/common/unwind/mod.rs
@@ -148,15 +148,17 @@ pub unsafe fn try<F: FnOnce()>(f: F) -> Result<(), Box<Any + Send>> {
     // care of exposing correctly.
     unsafe fn inner_try(f: fn(*mut u8), data: *mut u8)
                         -> Result<(), Box<Any + Send>> {
-        let prev = PANICKING.with(|s| s.get());
-        PANICKING.with(|s| s.set(false));
-        let ep = intrinsics::try(f, data);
-        PANICKING.with(|s| s.set(prev));
-        if ep.is_null() {
-            Ok(())
-        } else {
-            Err(imp::cleanup(ep))
-        }
+        PANICKING.with(|s| {
+            let prev = s.get();
+            s.set(false);
+            let ep = intrinsics::try(f, data);
+            s.set(prev);
+            if ep.is_null() {
+                Ok(())
+            } else {
+                Err(imp::cleanup(ep))
+            }
+        })
     }
 
     fn try_fn<F: FnOnce()>(opt_closure: *mut u8) {