about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/libcore/arc.rs11
-rw-r--r--src/libsyntax/ast_util.rs2
2 files changed, 8 insertions, 5 deletions
diff --git a/src/libcore/arc.rs b/src/libcore/arc.rs
index 312606be906..eb11c8f1c54 100644
--- a/src/libcore/arc.rs
+++ b/src/libcore/arc.rs
@@ -102,11 +102,14 @@ impl methods<T> for exclusive<T> {
     fn with<U>(f: fn(sys::condition, x: &T) -> U) -> U {
         unsafe {
             let ptr: ~arc_data<ex_data<T>> = unsafe::reinterpret_cast(*self);
-            let rec: &ex_data<T> = &(*ptr).data;
+            let r = {
+                let rec: &ex_data<T> = &(*ptr).data;
+                rec.lock.lock_cond() {|c|
+                    f(c, &rec.data)
+                }
+            };
             unsafe::forget(ptr);
-            rec.lock.lock_cond() {|c|
-                f(c, &rec.data)
-            }
+            r
         }
     }
 }
diff --git a/src/libsyntax/ast_util.rs b/src/libsyntax/ast_util.rs
index aa457cb4c63..09bb2cc5409 100644
--- a/src/libsyntax/ast_util.rs
+++ b/src/libsyntax/ast_util.rs
@@ -454,7 +454,7 @@ fn id_visitor(vfn: fn@(node_id)) -> visit::vt<()> {
 
         visit_expr: fn@(e: @expr) {
             vfn(e.id);
-            alt e.node { 
+            alt e.node {
               expr_index(*) | expr_assign_op(*) |
               expr_unary(*) | expr_binary(*) {
                 vfn(ast_util::op_expr_callee_id(e));