about summary refs log tree commit diff
path: root/src/libstd/arc.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/libstd/arc.rs')
-rw-r--r--src/libstd/arc.rs14
1 files changed, 8 insertions, 6 deletions
diff --git a/src/libstd/arc.rs b/src/libstd/arc.rs
index e48dc9acaeb..4d1a8af0b1d 100644
--- a/src/libstd/arc.rs
+++ b/src/libstd/arc.rs
@@ -430,9 +430,9 @@ impl<T: Const Owned> &RWWriteMode<T> {
     /// Access the pre-downgrade RWARC in write mode.
     fn write<U>(blk: fn(x: &mut T) -> U) -> U {
         match *self {
-            RWWriteMode((data, ref token, _)) => {
+            RWWriteMode((ref data, ref token, _)) => {
                 do token.write {
-                    blk(data)
+                    blk(&mut **data)
                 }
             }
         }
@@ -440,12 +440,14 @@ impl<T: Const Owned> &RWWriteMode<T> {
     /// Access the pre-downgrade RWARC in write mode with a condvar.
     fn write_cond<U>(blk: fn(x: &x/mut T, c: &c/Condvar) -> U) -> U {
         match *self {
-            RWWriteMode((data, ref token, ref poison)) => {
+            RWWriteMode((ref data, ref token, ref poison)) => {
                 do token.write_cond |cond| {
                     let cvar = Condvar {
-                        is_mutex: false, failed: poison.failed,
-                        cond: cond };
-                    blk(data, &cvar)
+                        is_mutex: false,
+                        failed: &mut *poison.failed,
+                        cond: cond
+                    };
+                    blk(&mut **data, &cvar)
                 }
             }
         }