Skip to content

Commit 21d23ff

Browse files
committed
Make Rc, Cell and RefCell NoShare
1 parent 37154fb commit 21d23ff

File tree

2 files changed

+18
-7
lines changed

2 files changed

+18
-7
lines changed

src/libstd/cell.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ pub struct Cell<T> {
2323
priv value: T,
2424
priv marker1: marker::InvariantType<T>,
2525
priv marker2: marker::NoFreeze,
26+
priv marker3: marker::NoShare,
2627
}
2728

2829
impl<T:Pod> Cell<T> {
@@ -32,6 +33,7 @@ impl<T:Pod> Cell<T> {
3233
value: value,
3334
marker1: marker::InvariantType::<T>,
3435
marker2: marker::NoFreeze,
36+
marker3: marker::NoShare,
3537
}
3638
}
3739

@@ -75,6 +77,7 @@ pub struct RefCell<T> {
7577
priv marker1: marker::InvariantType<T>,
7678
priv marker2: marker::NoFreeze,
7779
priv marker3: marker::NoPod,
80+
priv marker4: marker::NoShare,
7881
}
7982

8083
// Values [1, MAX-1] represent the number of `Ref` active
@@ -90,6 +93,7 @@ impl<T> RefCell<T> {
9093
marker1: marker::InvariantType::<T>,
9194
marker2: marker::NoFreeze,
9295
marker3: marker::NoPod,
96+
marker4: marker::NoShare,
9397
value: value,
9498
borrow: UNUSED,
9599
}

src/libstd/rc.rs

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,8 @@ struct RcBox<T> {
4242
#[unsafe_no_drop_flag]
4343
pub struct Rc<T> {
4444
priv ptr: *mut RcBox<T>,
45-
priv marker: marker::NoSend
45+
priv nosend: marker::NoSend,
46+
priv noshare: marker::NoShare
4647
}
4748

4849
impl<T> Rc<T> {
@@ -56,7 +57,8 @@ impl<T> Rc<T> {
5657
// strong destructor is running, even if the weak
5758
// pointer is stored inside the strong one.
5859
ptr: transmute(~RcBox { value: value, strong: 1, weak: 1 }),
59-
marker: marker::NoSend,
60+
nosend: marker::NoSend,
61+
noshare: marker::NoShare
6062
}
6163
}
6264
}
@@ -67,7 +69,11 @@ impl<T> Rc<T> {
6769
pub fn downgrade(&self) -> Weak<T> {
6870
unsafe {
6971
(*self.ptr).weak += 1;
70-
Weak { ptr: self.ptr, marker: marker::NoSend }
72+
Weak {
73+
ptr: self.ptr,
74+
nosend: marker::NoSend,
75+
noshare: marker::NoShare
76+
}
7177
}
7278
}
7379
}
@@ -107,7 +113,7 @@ impl<T> Clone for Rc<T> {
107113
fn clone(&self) -> Rc<T> {
108114
unsafe {
109115
(*self.ptr).strong += 1;
110-
Rc { ptr: self.ptr, marker: marker::NoSend }
116+
Rc { ptr: self.ptr, nosend: marker::NoSend, noshare: marker::NoShare }
111117
}
112118
}
113119
}
@@ -138,7 +144,8 @@ impl<T: Ord> Ord for Rc<T> {
138144
#[unsafe_no_drop_flag]
139145
pub struct Weak<T> {
140146
priv ptr: *mut RcBox<T>,
141-
priv marker: marker::NoSend
147+
priv nosend: marker::NoSend,
148+
priv noshare: marker::NoShare
142149
}
143150

144151
impl<T> Weak<T> {
@@ -149,7 +156,7 @@ impl<T> Weak<T> {
149156
None
150157
} else {
151158
(*self.ptr).strong += 1;
152-
Some(Rc { ptr: self.ptr, marker: marker::NoSend })
159+
Some(Rc { ptr: self.ptr, nosend: marker::NoSend, noshare: marker::NoShare })
153160
}
154161
}
155162
}
@@ -176,7 +183,7 @@ impl<T> Clone for Weak<T> {
176183
fn clone(&self) -> Weak<T> {
177184
unsafe {
178185
(*self.ptr).weak += 1;
179-
Weak { ptr: self.ptr, marker: marker::NoSend }
186+
Weak { ptr: self.ptr, nosend: marker::NoSend, noshare: marker::NoShare }
180187
}
181188
}
182189
}

0 commit comments

Comments
 (0)