diff options
| author | bors <bors@rust-lang.org> | 2013-12-22 18:21:34 -0800 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2013-12-22 18:21:34 -0800 |
| commit | 57724012ff4bc48e362102b30113359c2f45c28d (patch) | |
| tree | bd2d901f389ad4d9cb0d30c1d5a92f45761386a0 /src | |
| parent | 1b4bbc89b3ce40dc95abec688c322fef798292f1 (diff) | |
| parent | 67c02222526d46875ddabfda1b7a936564f916ff (diff) | |
auto merge of #11111 : alexcrichton/rust/issue-11039, r=brson
None of these primitives should be Freeze because sharing them in an Arc is a very bad idea. Closes #11039
Diffstat (limited to 'src')
| -rw-r--r-- | src/libstd/comm/mod.rs | 4 | ||||
| -rw-r--r-- | src/test/compile-fail/comm-not-freeze.rs | 17 |
2 files changed, 21 insertions, 0 deletions
diff --git a/src/libstd/comm/mod.rs b/src/libstd/comm/mod.rs index 4cbc6c7cbb7..30324d9bc60 100644 --- a/src/libstd/comm/mod.rs +++ b/src/libstd/comm/mod.rs @@ -292,6 +292,7 @@ impl<T: Send> Consumer<T>{ /// The receiving-half of Rust's channel type. This half can only be owned by /// one task +#[no_freeze] // can't share ports in an arc pub struct Port<T> { priv queue: Consumer<T>, } @@ -305,12 +306,15 @@ pub struct PortIterator<'a, T> { /// The sending-half of Rust's channel type. This half can only be owned by one /// task +#[no_freeze] // can't share chans in an arc pub struct Chan<T> { priv queue: spsc::Producer<T, Packet>, } /// The sending-half of Rust's channel type. This half can be shared among many /// tasks by creating copies of itself through the `clone` method. +#[no_freeze] // technically this implementation is shareable, but it shouldn't + // be required to be shareable in an arc pub struct SharedChan<T> { priv queue: mpsc::Producer<T, Packet>, } diff --git a/src/test/compile-fail/comm-not-freeze.rs b/src/test/compile-fail/comm-not-freeze.rs new file mode 100644 index 00000000000..2b85068d470 --- /dev/null +++ b/src/test/compile-fail/comm-not-freeze.rs @@ -0,0 +1,17 @@ +// Copyright 2013 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or +// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license +// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +fn test<T: Freeze>() {} + +fn main() { + test::<Chan<int>>(); //~ ERROR: does not fulfill `Freeze` + test::<Port<int>>(); //~ ERROR: does not fulfill `Freeze` + test::<SharedChan<int>>(); //~ ERROR: does not fulfill `Freeze` +} |
