diff options
| author | Flavio Percoco <flaper87@gmail.com> | 2014-03-05 22:09:38 +0100 |
|---|---|---|
| committer | Flavio Percoco <flaper87@gmail.com> | 2014-03-20 10:16:55 +0100 |
| commit | 21d23ff25b3709bbd72b62613ba6db00d65bf1a4 (patch) | |
| tree | edf3d1327f7345df85bb8c6cfe0b5f96d626cece /src/libstd | |
| parent | 37154fb8b939e9f81d9feb8139c7879099fb5cd6 (diff) | |
| download | rust-21d23ff25b3709bbd72b62613ba6db00d65bf1a4.tar.gz rust-21d23ff25b3709bbd72b62613ba6db00d65bf1a4.zip | |
Make `Rc`, `Cell` and `RefCell` NoShare
Diffstat (limited to 'src/libstd')
| -rw-r--r-- | src/libstd/cell.rs | 4 | ||||
| -rw-r--r-- | src/libstd/rc.rs | 21 |
2 files changed, 18 insertions, 7 deletions
diff --git a/src/libstd/cell.rs b/src/libstd/cell.rs index 398091b60ca..3276bbbcbb6 100644 --- a/src/libstd/cell.rs +++ b/src/libstd/cell.rs @@ -23,6 +23,7 @@ pub struct Cell<T> { priv value: T, priv marker1: marker::InvariantType<T>, priv marker2: marker::NoFreeze, + priv marker3: marker::NoShare, } impl<T:Pod> Cell<T> { @@ -32,6 +33,7 @@ impl<T:Pod> Cell<T> { value: value, marker1: marker::InvariantType::<T>, marker2: marker::NoFreeze, + marker3: marker::NoShare, } } @@ -75,6 +77,7 @@ pub struct RefCell<T> { priv marker1: marker::InvariantType<T>, priv marker2: marker::NoFreeze, priv marker3: marker::NoPod, + priv marker4: marker::NoShare, } // Values [1, MAX-1] represent the number of `Ref` active @@ -90,6 +93,7 @@ impl<T> RefCell<T> { marker1: marker::InvariantType::<T>, marker2: marker::NoFreeze, marker3: marker::NoPod, + marker4: marker::NoShare, value: value, borrow: UNUSED, } diff --git a/src/libstd/rc.rs b/src/libstd/rc.rs index 5c4b19b4e4b..605cbd3f28a 100644 --- a/src/libstd/rc.rs +++ b/src/libstd/rc.rs @@ -42,7 +42,8 @@ struct RcBox<T> { #[unsafe_no_drop_flag] pub struct Rc<T> { priv ptr: *mut RcBox<T>, - priv marker: marker::NoSend + priv nosend: marker::NoSend, + priv noshare: marker::NoShare } impl<T> Rc<T> { @@ -56,7 +57,8 @@ impl<T> Rc<T> { // strong destructor is running, even if the weak // pointer is stored inside the strong one. ptr: transmute(~RcBox { value: value, strong: 1, weak: 1 }), - marker: marker::NoSend, + nosend: marker::NoSend, + noshare: marker::NoShare } } } @@ -67,7 +69,11 @@ impl<T> Rc<T> { pub fn downgrade(&self) -> Weak<T> { unsafe { (*self.ptr).weak += 1; - Weak { ptr: self.ptr, marker: marker::NoSend } + Weak { + ptr: self.ptr, + nosend: marker::NoSend, + noshare: marker::NoShare + } } } } @@ -107,7 +113,7 @@ impl<T> Clone for Rc<T> { fn clone(&self) -> Rc<T> { unsafe { (*self.ptr).strong += 1; - Rc { ptr: self.ptr, marker: marker::NoSend } + Rc { ptr: self.ptr, nosend: marker::NoSend, noshare: marker::NoShare } } } } @@ -138,7 +144,8 @@ impl<T: Ord> Ord for Rc<T> { #[unsafe_no_drop_flag] pub struct Weak<T> { priv ptr: *mut RcBox<T>, - priv marker: marker::NoSend + priv nosend: marker::NoSend, + priv noshare: marker::NoShare } impl<T> Weak<T> { @@ -149,7 +156,7 @@ impl<T> Weak<T> { None } else { (*self.ptr).strong += 1; - Some(Rc { ptr: self.ptr, marker: marker::NoSend }) + Some(Rc { ptr: self.ptr, nosend: marker::NoSend, noshare: marker::NoShare }) } } } @@ -176,7 +183,7 @@ impl<T> Clone for Weak<T> { fn clone(&self) -> Weak<T> { unsafe { (*self.ptr).weak += 1; - Weak { ptr: self.ptr, marker: marker::NoSend } + Weak { ptr: self.ptr, nosend: marker::NoSend, noshare: marker::NoShare } } } } |
