mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-24 15:54:15 +00:00
Fallout from stabilization
This commit is contained in:
parent
f67b81e8d4
commit
caca9b2e71
@ -447,7 +447,7 @@ fn run_debuginfo_gdb_test(config: &Config, props: &TestProps, testfile: &Path) {
|
||||
loop {
|
||||
//waiting 1 second for gdbserver start
|
||||
timer::sleep(Duration::milliseconds(1000));
|
||||
let result = Thread::spawn(move || {
|
||||
let result = Thread::scoped(move || {
|
||||
tcp::TcpStream::connect("127.0.0.1:5039").unwrap();
|
||||
}).join();
|
||||
if result.is_err() {
|
||||
|
@ -395,7 +395,7 @@ fn main() {
|
||||
for _ in range(0u, 10u) {
|
||||
Thread::spawn(move || {
|
||||
println!("Hello, world!");
|
||||
}).detach();
|
||||
});
|
||||
}
|
||||
}
|
||||
```
|
||||
@ -405,8 +405,7 @@ This program creates ten threads, who all print `Hello, world!`. The
|
||||
double bars `||`. (The `move` keyword indicates that the closure takes
|
||||
ownership of any data it uses; we'll have more on the significance of
|
||||
this shortly.) This closure is executed in a new thread created by
|
||||
`spawn`. The `detach` method means that the child thread is allowed to
|
||||
outlive its parent.
|
||||
`spawn`.
|
||||
|
||||
One common form of problem in concurrent programs is a 'data race.'
|
||||
This occurs when two different threads attempt to access the same
|
||||
@ -429,7 +428,7 @@ fn main() {
|
||||
for i in range(0u, 3u) {
|
||||
Thread::spawn(move || {
|
||||
for j in range(0, 3) { numbers[j] += 1 }
|
||||
}).detach();
|
||||
});
|
||||
}
|
||||
}
|
||||
```
|
||||
@ -488,7 +487,7 @@ fn main() {
|
||||
(*array)[i] += 1;
|
||||
|
||||
println!("numbers[{}] is {}", i, (*array)[i]);
|
||||
}).detach();
|
||||
});
|
||||
}
|
||||
}
|
||||
```
|
||||
|
@ -42,7 +42,7 @@
|
||||
//!
|
||||
//! Thread::spawn(move || {
|
||||
//! println!("{}", five);
|
||||
//! }).detach();
|
||||
//! });
|
||||
//! }
|
||||
//! ```
|
||||
//!
|
||||
@ -63,7 +63,7 @@
|
||||
//! *number += 1;
|
||||
//!
|
||||
//! println!("{}", *number); // prints 6
|
||||
//! }).detach();
|
||||
//! });
|
||||
//! }
|
||||
//! ```
|
||||
|
||||
@ -106,7 +106,7 @@ use heap::deallocate;
|
||||
/// let local_numbers = child_numbers.as_slice();
|
||||
///
|
||||
/// // Work with the local numbers
|
||||
/// }).detach();
|
||||
/// });
|
||||
/// }
|
||||
/// }
|
||||
/// ```
|
||||
|
@ -924,7 +924,7 @@ mod tests {
|
||||
#[test]
|
||||
fn test_send() {
|
||||
let n = list_from(&[1i,2,3]);
|
||||
Thread::spawn(move || {
|
||||
Thread::scoped(move || {
|
||||
check_links(&n);
|
||||
let a: &[_] = &[&1,&2,&3];
|
||||
assert_eq!(a, n.iter().collect::<Vec<&int>>());
|
||||
|
@ -50,7 +50,7 @@
|
||||
//! let spinlock_clone = spinlock.clone();
|
||||
//! Thread::spawn(move|| {
|
||||
//! spinlock_clone.store(0, Ordering::SeqCst);
|
||||
//! }).detach();
|
||||
//! });
|
||||
//!
|
||||
//! // Wait for the other task to release the lock
|
||||
//! while spinlock.load(Ordering::SeqCst) != 0 {}
|
||||
|
@ -559,7 +559,7 @@ pub fn monitor<F:FnOnce()+Send>(f: F) {
|
||||
cfg = cfg.stack_size(STACK_SIZE);
|
||||
}
|
||||
|
||||
match cfg.spawn(move || { std::io::stdio::set_stderr(box w); f() }).join() {
|
||||
match cfg.scoped(move || { std::io::stdio::set_stderr(box w); f() }).join() {
|
||||
Ok(()) => { /* fallthrough */ }
|
||||
Err(value) => {
|
||||
// Thread panicked without emitting a fatal diagnostic
|
||||
|
@ -928,7 +928,7 @@ fn run_work_multithreaded(sess: &Session,
|
||||
}
|
||||
|
||||
tx.take().unwrap().send(()).unwrap();
|
||||
}).detach();
|
||||
});
|
||||
}
|
||||
|
||||
let mut panicked = false;
|
||||
|
@ -116,7 +116,7 @@ struct Output {
|
||||
|
||||
pub fn main() {
|
||||
static STACK_SIZE: uint = 32000000; // 32MB
|
||||
let res = std::thread::Builder::new().stack_size(STACK_SIZE).spawn(move || {
|
||||
let res = std::thread::Builder::new().stack_size(STACK_SIZE).scoped(move || {
|
||||
main_args(std::os::args().as_slice())
|
||||
}).join();
|
||||
std::os::set_exit_status(res.map_err(|_| ()).unwrap());
|
||||
@ -358,7 +358,7 @@ fn rust_input(cratefile: &str, externs: core::Externs, matches: &getopts::Matche
|
||||
let cr = Path::new(cratefile);
|
||||
info!("starting to run rustc");
|
||||
|
||||
let (mut krate, analysis) = std::thread::Thread::spawn(move |:| {
|
||||
let (mut krate, analysis) = std::thread::Thread::scoped(move |:| {
|
||||
let cr = cr;
|
||||
core::run_core(paths, cfgs, externs, &cr, triple)
|
||||
}).join().map_err(|_| "rustc failed").unwrap();
|
||||
|
@ -157,7 +157,7 @@ fn runtest(test: &str, cratename: &str, libs: SearchPaths,
|
||||
None => box io::stderr() as Box<Writer>,
|
||||
};
|
||||
io::util::copy(&mut p, &mut err).unwrap();
|
||||
}).detach();
|
||||
});
|
||||
let emitter = diagnostic::EmitterWriter::new(box w2, None);
|
||||
|
||||
// Compile the code
|
||||
|
@ -172,7 +172,7 @@ mod test {
|
||||
tx.send(vec![3u8, 4u8]).unwrap();
|
||||
tx.send(vec![5u8, 6u8]).unwrap();
|
||||
tx.send(vec![7u8, 8u8]).unwrap();
|
||||
}).detach();
|
||||
});
|
||||
|
||||
let mut reader = ChanReader::new(rx);
|
||||
let mut buf = [0u8; 3];
|
||||
@ -215,7 +215,7 @@ mod test {
|
||||
tx.send(b"rld\nhow ".to_vec()).unwrap();
|
||||
tx.send(b"are you?".to_vec()).unwrap();
|
||||
tx.send(b"".to_vec()).unwrap();
|
||||
}).detach();
|
||||
});
|
||||
|
||||
let mut reader = ChanReader::new(rx);
|
||||
|
||||
@ -234,7 +234,7 @@ mod test {
|
||||
writer.write_be_u32(42).unwrap();
|
||||
|
||||
let wanted = vec![0u8, 0u8, 0u8, 42u8];
|
||||
let got = match Thread::spawn(move|| { rx.recv().unwrap() }).join() {
|
||||
let got = match Thread::scoped(move|| { rx.recv().unwrap() }).join() {
|
||||
Ok(got) => got,
|
||||
Err(_) => panic!(),
|
||||
};
|
||||
|
@ -120,10 +120,12 @@
|
||||
//! for stream in acceptor.incoming() {
|
||||
//! match stream {
|
||||
//! Err(e) => { /* connection failed */ }
|
||||
//! Ok(stream) => Thread::spawn(move|| {
|
||||
//! // connection succeeded
|
||||
//! handle_client(stream)
|
||||
//! }).detach()
|
||||
//! Ok(stream) => {
|
||||
//! Thread::spawn(move|| {
|
||||
//! // connection succeeded
|
||||
//! handle_client(stream)
|
||||
//! });
|
||||
//! }
|
||||
//! }
|
||||
//! }
|
||||
//!
|
||||
|
@ -608,7 +608,7 @@ mod tests {
|
||||
let mut a = a;
|
||||
let _s = a.accept().unwrap();
|
||||
let _ = rx.recv();
|
||||
}).detach();
|
||||
});
|
||||
|
||||
let mut b = [0];
|
||||
let mut s = UnixStream::connect(&addr).unwrap();
|
||||
@ -645,7 +645,7 @@ mod tests {
|
||||
let mut a = a;
|
||||
let _s = a.accept().unwrap();
|
||||
let _ = rx.recv();
|
||||
}).detach();
|
||||
});
|
||||
|
||||
let mut s = UnixStream::connect(&addr).unwrap();
|
||||
let s2 = s.clone();
|
||||
@ -672,7 +672,7 @@ mod tests {
|
||||
rx.recv().unwrap();
|
||||
assert!(s.write(&[0]).is_ok());
|
||||
let _ = rx.recv();
|
||||
}).detach();
|
||||
});
|
||||
|
||||
let mut s = a.accept().unwrap();
|
||||
s.set_timeout(Some(20));
|
||||
@ -716,7 +716,7 @@ mod tests {
|
||||
}
|
||||
}
|
||||
let _ = rx.recv();
|
||||
}).detach();
|
||||
});
|
||||
|
||||
let mut s = a.accept().unwrap();
|
||||
s.set_read_timeout(Some(20));
|
||||
@ -739,7 +739,7 @@ mod tests {
|
||||
rx.recv().unwrap();
|
||||
assert!(s.write(&[0]).is_ok());
|
||||
let _ = rx.recv();
|
||||
}).detach();
|
||||
});
|
||||
|
||||
let mut s = a.accept().unwrap();
|
||||
s.set_write_timeout(Some(20));
|
||||
@ -766,7 +766,7 @@ mod tests {
|
||||
rx.recv().unwrap();
|
||||
assert!(s.write(&[0]).is_ok());
|
||||
let _ = rx.recv();
|
||||
}).detach();
|
||||
});
|
||||
|
||||
let mut s = a.accept().unwrap();
|
||||
let s2 = s.clone();
|
||||
|
@ -146,7 +146,7 @@ impl TcpStream {
|
||||
/// timer::sleep(Duration::seconds(1));
|
||||
/// let mut stream = stream2;
|
||||
/// stream.close_read();
|
||||
/// }).detach();
|
||||
/// });
|
||||
///
|
||||
/// // wait for some data, will get canceled after one second
|
||||
/// let mut buf = [0];
|
||||
@ -295,10 +295,12 @@ impl sys_common::AsInner<TcpStreamImp> for TcpStream {
|
||||
/// for stream in acceptor.incoming() {
|
||||
/// match stream {
|
||||
/// Err(e) => { /* connection failed */ }
|
||||
/// Ok(stream) => Thread::spawn(move|| {
|
||||
/// // connection succeeded
|
||||
/// handle_client(stream)
|
||||
/// }).detach()
|
||||
/// Ok(stream) => {
|
||||
/// Thread::spawn(move|| {
|
||||
/// // connection succeeded
|
||||
/// handle_client(stream)
|
||||
/// });
|
||||
/// }
|
||||
/// }
|
||||
/// }
|
||||
///
|
||||
@ -432,7 +434,7 @@ impl TcpAcceptor {
|
||||
/// Err(e) => panic!("unexpected error: {}", e),
|
||||
/// }
|
||||
/// }
|
||||
/// }).detach();
|
||||
/// });
|
||||
///
|
||||
/// # fn wait_for_sigint() {}
|
||||
/// // Now that our accept loop is running, wait for the program to be
|
||||
@ -1186,7 +1188,7 @@ mod test {
|
||||
let mut a = a;
|
||||
let _s = a.accept().unwrap();
|
||||
let _ = rx.recv().unwrap();
|
||||
}).detach();
|
||||
});
|
||||
|
||||
let mut b = [0];
|
||||
let mut s = TcpStream::connect(addr).unwrap();
|
||||
@ -1223,7 +1225,7 @@ mod test {
|
||||
let mut a = a;
|
||||
let _s = a.accept().unwrap();
|
||||
let _ = rx.recv().unwrap();
|
||||
}).detach();
|
||||
});
|
||||
|
||||
let mut s = TcpStream::connect(addr).unwrap();
|
||||
let s2 = s.clone();
|
||||
@ -1250,7 +1252,7 @@ mod test {
|
||||
rx.recv().unwrap();
|
||||
assert!(s.write(&[0]).is_ok());
|
||||
let _ = rx.recv();
|
||||
}).detach();
|
||||
});
|
||||
|
||||
let mut s = a.accept().unwrap();
|
||||
s.set_timeout(Some(20));
|
||||
@ -1289,7 +1291,7 @@ mod test {
|
||||
}
|
||||
}
|
||||
let _ = rx.recv();
|
||||
}).detach();
|
||||
});
|
||||
|
||||
let mut s = a.accept().unwrap();
|
||||
s.set_read_timeout(Some(20));
|
||||
@ -1312,7 +1314,7 @@ mod test {
|
||||
rx.recv().unwrap();
|
||||
assert!(s.write(&[0]).is_ok());
|
||||
let _ = rx.recv();
|
||||
}).detach();
|
||||
});
|
||||
|
||||
let mut s = a.accept().unwrap();
|
||||
s.set_write_timeout(Some(20));
|
||||
@ -1340,7 +1342,7 @@ mod test {
|
||||
rx.recv().unwrap();
|
||||
assert_eq!(s.write(&[0]), Ok(()));
|
||||
let _ = rx.recv();
|
||||
}).detach();
|
||||
});
|
||||
|
||||
let mut s = a.accept().unwrap();
|
||||
let s2 = s.clone();
|
||||
|
@ -705,7 +705,7 @@ impl Process {
|
||||
Thread::spawn(move |:| {
|
||||
let mut stream = stream;
|
||||
tx.send(stream.read_to_end()).unwrap();
|
||||
}).detach();
|
||||
});
|
||||
}
|
||||
None => tx.send(Ok(Vec::new())).unwrap()
|
||||
}
|
||||
|
@ -358,7 +358,7 @@ mod test {
|
||||
|
||||
Thread::spawn(move|| {
|
||||
let _ = timer_rx.recv();
|
||||
}).detach();
|
||||
});
|
||||
|
||||
// when we drop the TimerWatcher we're going to destroy the channel,
|
||||
// which must wake up the task on the other end
|
||||
@ -372,7 +372,7 @@ mod test {
|
||||
|
||||
Thread::spawn(move|| {
|
||||
let _ = timer_rx.recv();
|
||||
}).detach();
|
||||
});
|
||||
|
||||
timer.oneshot(Duration::milliseconds(1));
|
||||
}
|
||||
@ -385,7 +385,7 @@ mod test {
|
||||
|
||||
Thread::spawn(move|| {
|
||||
let _ = timer_rx.recv();
|
||||
}).detach();
|
||||
});
|
||||
|
||||
timer.sleep(Duration::milliseconds(1));
|
||||
}
|
||||
|
@ -303,8 +303,8 @@ macro_rules! try {
|
||||
/// # fn long_running_task() {}
|
||||
/// # fn calculate_the_answer() -> int { 42i }
|
||||
///
|
||||
/// Thread::spawn(move|| { long_running_task(); tx1.send(()) }).detach();
|
||||
/// Thread::spawn(move|| { tx2.send(calculate_the_answer()) }).detach();
|
||||
/// Thread::spawn(move|| { long_running_task(); tx1.send(()).unwrap(); });
|
||||
/// Thread::spawn(move|| { tx2.send(calculate_the_answer()).unwrap(); });
|
||||
///
|
||||
/// select! (
|
||||
/// _ = rx1.recv() => println!("the long running task finished first"),
|
||||
|
@ -502,17 +502,17 @@ mod tests {
|
||||
#[test]
|
||||
fn test_null_byte() {
|
||||
use thread::Thread;
|
||||
let result = Thread::spawn(move|| {
|
||||
let result = Thread::scoped(move|| {
|
||||
Path::new(b"foo/bar\0")
|
||||
}).join();
|
||||
assert!(result.is_err());
|
||||
|
||||
let result = Thread::spawn(move|| {
|
||||
let result = Thread::scoped(move|| {
|
||||
Path::new("test").set_filename(b"f\0o")
|
||||
}).join();
|
||||
assert!(result.is_err());
|
||||
|
||||
let result = Thread::spawn(move|| {
|
||||
let result = Thread::scoped(move|| {
|
||||
Path::new("test").push(b"f\0o");
|
||||
}).join();
|
||||
assert!(result.is_err());
|
||||
|
@ -1287,17 +1287,17 @@ mod tests {
|
||||
#[test]
|
||||
fn test_null_byte() {
|
||||
use thread::Thread;
|
||||
let result = Thread::spawn(move|| {
|
||||
let result = Thread::scoped(move|| {
|
||||
Path::new(b"foo/bar\0")
|
||||
}).join();
|
||||
assert!(result.is_err());
|
||||
|
||||
let result = Thread::spawn(move|| {
|
||||
let result = Thread::scoped(move|| {
|
||||
Path::new("test").set_filename(b"f\0o")
|
||||
}).join();
|
||||
assert!(result.is_err());
|
||||
|
||||
let result = Thread::spawn(move || {
|
||||
let result = Thread::scoped(move || {
|
||||
Path::new("test").push(b"f\0o");
|
||||
}).join();
|
||||
assert!(result.is_err());
|
||||
|
@ -397,7 +397,7 @@ mod test {
|
||||
r.fill_bytes(&mut v);
|
||||
Thread::yield_now();
|
||||
}
|
||||
}).detach();
|
||||
});
|
||||
}
|
||||
|
||||
// start all the tasks
|
||||
|
@ -26,7 +26,7 @@ use sync::{Mutex, Condvar};
|
||||
/// println!("before wait");
|
||||
/// c.wait();
|
||||
/// println!("after wait");
|
||||
/// }).detach();
|
||||
/// });
|
||||
/// }
|
||||
/// ```
|
||||
#[stable]
|
||||
@ -126,7 +126,7 @@ mod tests {
|
||||
let tx = tx.clone();
|
||||
Thread::spawn(move|| {
|
||||
tx.send(c.wait().is_leader()).unwrap();
|
||||
}).detach();
|
||||
});
|
||||
}
|
||||
|
||||
// At this point, all spawned tasks should be blocked,
|
||||
|
@ -48,7 +48,7 @@ use sync::{mutex, MutexGuard};
|
||||
/// let mut started = lock.lock().unwrap();
|
||||
/// *started = true;
|
||||
/// cvar.notify_one();
|
||||
/// }).detach();
|
||||
/// });
|
||||
///
|
||||
/// // wait for the thread to start up
|
||||
/// let &(ref lock, ref cvar) = &*pair;
|
||||
@ -338,7 +338,7 @@ mod tests {
|
||||
cnt = cond.wait(cnt).unwrap();
|
||||
}
|
||||
tx.send(()).unwrap();
|
||||
}).detach();
|
||||
});
|
||||
}
|
||||
drop(tx);
|
||||
|
||||
|
@ -141,7 +141,7 @@ impl<A:Send> Future<A> {
|
||||
Thread::spawn(move |:| {
|
||||
// Don't panic if the other end has hung up
|
||||
let _ = tx.send(blk());
|
||||
}).detach();
|
||||
});
|
||||
|
||||
Future::from_receiver(rx)
|
||||
}
|
||||
|
@ -60,7 +60,7 @@
|
||||
//! let (tx, rx) = channel();
|
||||
//! Thread::spawn(move|| {
|
||||
//! tx.send(10i).unwrap();
|
||||
//! }).detach();
|
||||
//! });
|
||||
//! assert_eq!(rx.recv().unwrap(), 10i);
|
||||
//! ```
|
||||
//!
|
||||
@ -78,7 +78,7 @@
|
||||
//! let tx = tx.clone();
|
||||
//! Thread::spawn(move|| {
|
||||
//! tx.send(i).unwrap();
|
||||
//! }).detach()
|
||||
//! });
|
||||
//! }
|
||||
//!
|
||||
//! for _ in range(0i, 10i) {
|
||||
@ -109,7 +109,7 @@
|
||||
//! Thread::spawn(move|| {
|
||||
//! // This will wait for the parent task to start receiving
|
||||
//! tx.send(53).unwrap();
|
||||
//! }).detach();
|
||||
//! });
|
||||
//! rx.recv().unwrap();
|
||||
//! ```
|
||||
//!
|
||||
@ -476,7 +476,7 @@ impl<T> UnsafeFlavor<T> for Receiver<T> {
|
||||
/// Thread::spawn(move|| {
|
||||
/// # fn expensive_computation() {}
|
||||
/// tx.send(expensive_computation()).unwrap();
|
||||
/// }).detach();
|
||||
/// });
|
||||
///
|
||||
/// // Do some useful work for awhile
|
||||
///
|
||||
@ -518,7 +518,7 @@ pub fn channel<T: Send>() -> (Sender<T>, Receiver<T>) {
|
||||
/// Thread::spawn(move|| {
|
||||
/// // this will block until the previous message has been received
|
||||
/// tx.send(2i).unwrap();
|
||||
/// }).detach();
|
||||
/// });
|
||||
///
|
||||
/// assert_eq!(rx.recv().unwrap(), 1i);
|
||||
/// assert_eq!(rx.recv().unwrap(), 2i);
|
||||
@ -1144,7 +1144,7 @@ mod test {
|
||||
#[test]
|
||||
fn stress() {
|
||||
let (tx, rx) = channel::<int>();
|
||||
let t = Thread::spawn(move|| {
|
||||
let t = Thread::scoped(move|| {
|
||||
for _ in range(0u, 10000) { tx.send(1i).unwrap(); }
|
||||
});
|
||||
for _ in range(0u, 10000) {
|
||||
@ -1159,7 +1159,7 @@ mod test {
|
||||
static NTHREADS: uint = 8;
|
||||
let (tx, rx) = channel::<int>();
|
||||
|
||||
let t = Thread::spawn(move|| {
|
||||
let t = Thread::scoped(move|| {
|
||||
for _ in range(0, AMT * NTHREADS) {
|
||||
assert_eq!(rx.recv().unwrap(), 1);
|
||||
}
|
||||
@ -1173,7 +1173,7 @@ mod test {
|
||||
let tx = tx.clone();
|
||||
Thread::spawn(move|| {
|
||||
for _ in range(0, AMT) { tx.send(1).unwrap(); }
|
||||
}).detach();
|
||||
});
|
||||
}
|
||||
drop(tx);
|
||||
t.join().ok().unwrap();
|
||||
@ -1183,14 +1183,14 @@ mod test {
|
||||
fn send_from_outside_runtime() {
|
||||
let (tx1, rx1) = channel::<()>();
|
||||
let (tx2, rx2) = channel::<int>();
|
||||
let t1 = Thread::spawn(move|| {
|
||||
let t1 = Thread::scoped(move|| {
|
||||
tx1.send(()).unwrap();
|
||||
for _ in range(0i, 40) {
|
||||
assert_eq!(rx2.recv().unwrap(), 1);
|
||||
}
|
||||
});
|
||||
rx1.recv().unwrap();
|
||||
let t2 = Thread::spawn(move|| {
|
||||
let t2 = Thread::scoped(move|| {
|
||||
for _ in range(0i, 40) {
|
||||
tx2.send(1).unwrap();
|
||||
}
|
||||
@ -1202,7 +1202,7 @@ mod test {
|
||||
#[test]
|
||||
fn recv_from_outside_runtime() {
|
||||
let (tx, rx) = channel::<int>();
|
||||
let t = Thread::spawn(move|| {
|
||||
let t = Thread::scoped(move|| {
|
||||
for _ in range(0i, 40) {
|
||||
assert_eq!(rx.recv().unwrap(), 1);
|
||||
}
|
||||
@ -1217,11 +1217,11 @@ mod test {
|
||||
fn no_runtime() {
|
||||
let (tx1, rx1) = channel::<int>();
|
||||
let (tx2, rx2) = channel::<int>();
|
||||
let t1 = Thread::spawn(move|| {
|
||||
let t1 = Thread::scoped(move|| {
|
||||
assert_eq!(rx1.recv().unwrap(), 1);
|
||||
tx2.send(2).unwrap();
|
||||
});
|
||||
let t2 = Thread::spawn(move|| {
|
||||
let t2 = Thread::scoped(move|| {
|
||||
tx1.send(1).unwrap();
|
||||
assert_eq!(rx2.recv().unwrap(), 2);
|
||||
});
|
||||
@ -1254,7 +1254,7 @@ mod test {
|
||||
#[test]
|
||||
fn oneshot_single_thread_recv_chan_close() {
|
||||
// Receiving on a closed chan will panic
|
||||
let res = Thread::spawn(move|| {
|
||||
let res = Thread::scoped(move|| {
|
||||
let (tx, rx) = channel::<int>();
|
||||
drop(tx);
|
||||
rx.recv().unwrap();
|
||||
@ -1336,7 +1336,7 @@ mod test {
|
||||
let _t = Thread::spawn(move|| {
|
||||
drop(tx);
|
||||
});
|
||||
let res = Thread::spawn(move|| {
|
||||
let res = Thread::scoped(move|| {
|
||||
assert!(rx.recv().unwrap() == box 10);
|
||||
}).join();
|
||||
assert!(res.is_err());
|
||||
@ -1360,7 +1360,7 @@ mod test {
|
||||
let _t = Thread::spawn(move|| {
|
||||
drop(rx);
|
||||
});
|
||||
let _ = Thread::spawn(move|| {
|
||||
let _ = Thread::scoped(move|| {
|
||||
tx.send(1).unwrap();
|
||||
}).join();
|
||||
}
|
||||
@ -1371,15 +1371,15 @@ mod test {
|
||||
for _ in range(0, stress_factor()) {
|
||||
let (tx, rx) = channel::<int>();
|
||||
Thread::spawn(move|| {
|
||||
let res = Thread::spawn(move|| {
|
||||
let res = Thread::scoped(move|| {
|
||||
rx.recv().unwrap();
|
||||
}).join();
|
||||
assert!(res.is_err());
|
||||
}).detach();
|
||||
});
|
||||
let _t = Thread::spawn(move|| {
|
||||
Thread::spawn(move|| {
|
||||
drop(tx);
|
||||
}).detach();
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
@ -1409,7 +1409,7 @@ mod test {
|
||||
Thread::spawn(move|| {
|
||||
tx.send(box i).unwrap();
|
||||
send(tx, i + 1);
|
||||
}).detach();
|
||||
});
|
||||
}
|
||||
|
||||
fn recv(rx: Receiver<Box<int>>, i: int) {
|
||||
@ -1418,7 +1418,7 @@ mod test {
|
||||
Thread::spawn(move|| {
|
||||
assert!(rx.recv().unwrap() == box i);
|
||||
recv(rx, i + 1);
|
||||
}).detach();
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1439,7 +1439,7 @@ mod test {
|
||||
let tx = tx.clone();
|
||||
Thread::spawn(move|| {
|
||||
tx.send(()).unwrap();
|
||||
}).detach();
|
||||
});
|
||||
}
|
||||
|
||||
for _ in range(0, total) {
|
||||
@ -1644,7 +1644,7 @@ mod sync_tests {
|
||||
Thread::spawn(move|| {
|
||||
tx.send(1).unwrap();
|
||||
tx.send(1).unwrap();
|
||||
}).detach();
|
||||
});
|
||||
while rx.recv().is_ok() {}
|
||||
}
|
||||
|
||||
@ -1653,7 +1653,7 @@ mod sync_tests {
|
||||
let (tx, rx) = sync_channel::<int>(0);
|
||||
Thread::spawn(move|| {
|
||||
for _ in range(0u, 10000) { tx.send(1).unwrap(); }
|
||||
}).detach();
|
||||
});
|
||||
for _ in range(0u, 10000) {
|
||||
assert_eq!(rx.recv().unwrap(), 1);
|
||||
}
|
||||
@ -1675,13 +1675,13 @@ mod sync_tests {
|
||||
_ => {}
|
||||
}
|
||||
dtx.send(()).unwrap();
|
||||
}).detach();
|
||||
});
|
||||
|
||||
for _ in range(0, NTHREADS) {
|
||||
let tx = tx.clone();
|
||||
Thread::spawn(move|| {
|
||||
for _ in range(0, AMT) { tx.send(1).unwrap(); }
|
||||
}).detach();
|
||||
});
|
||||
}
|
||||
drop(tx);
|
||||
drx.recv().unwrap();
|
||||
@ -1712,7 +1712,7 @@ mod sync_tests {
|
||||
#[test]
|
||||
fn oneshot_single_thread_recv_chan_close() {
|
||||
// Receiving on a closed chan will panic
|
||||
let res = Thread::spawn(move|| {
|
||||
let res = Thread::scoped(move|| {
|
||||
let (tx, rx) = sync_channel::<int>(0);
|
||||
drop(tx);
|
||||
rx.recv().unwrap();
|
||||
@ -1800,7 +1800,7 @@ mod sync_tests {
|
||||
let _t = Thread::spawn(move|| {
|
||||
drop(tx);
|
||||
});
|
||||
let res = Thread::spawn(move|| {
|
||||
let res = Thread::scoped(move|| {
|
||||
assert!(rx.recv().unwrap() == box 10);
|
||||
}).join();
|
||||
assert!(res.is_err());
|
||||
@ -1824,7 +1824,7 @@ mod sync_tests {
|
||||
let _t = Thread::spawn(move|| {
|
||||
drop(rx);
|
||||
});
|
||||
let _ = Thread::spawn(move || {
|
||||
let _ = Thread::scoped(move || {
|
||||
tx.send(1).unwrap();
|
||||
}).join();
|
||||
}
|
||||
@ -1835,7 +1835,7 @@ mod sync_tests {
|
||||
for _ in range(0, stress_factor()) {
|
||||
let (tx, rx) = sync_channel::<int>(0);
|
||||
let _t = Thread::spawn(move|| {
|
||||
let res = Thread::spawn(move|| {
|
||||
let res = Thread::scoped(move|| {
|
||||
rx.recv().unwrap();
|
||||
}).join();
|
||||
assert!(res.is_err());
|
||||
@ -1843,7 +1843,7 @@ mod sync_tests {
|
||||
let _t = Thread::spawn(move|| {
|
||||
Thread::spawn(move|| {
|
||||
drop(tx);
|
||||
}).detach();
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
@ -1873,7 +1873,7 @@ mod sync_tests {
|
||||
Thread::spawn(move|| {
|
||||
tx.send(box i).unwrap();
|
||||
send(tx, i + 1);
|
||||
}).detach();
|
||||
});
|
||||
}
|
||||
|
||||
fn recv(rx: Receiver<Box<int>>, i: int) {
|
||||
@ -1882,7 +1882,7 @@ mod sync_tests {
|
||||
Thread::spawn(move|| {
|
||||
assert!(rx.recv().unwrap() == box i);
|
||||
recv(rx, i + 1);
|
||||
}).detach();
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1903,7 +1903,7 @@ mod sync_tests {
|
||||
let tx = tx.clone();
|
||||
Thread::spawn(move|| {
|
||||
tx.send(()).unwrap();
|
||||
}).detach();
|
||||
});
|
||||
}
|
||||
|
||||
for _ in range(0, total) {
|
||||
|
@ -188,7 +188,7 @@ mod tests {
|
||||
q.push(i);
|
||||
}
|
||||
tx.send(()).unwrap();
|
||||
}).detach();
|
||||
});
|
||||
}
|
||||
|
||||
let mut i = 0u;
|
||||
|
@ -75,7 +75,7 @@ use sys_common::mutex as sys;
|
||||
/// tx.send(()).unwrap();
|
||||
/// }
|
||||
/// // the lock is unlocked here when `data` goes out of scope.
|
||||
/// }).detach();
|
||||
/// });
|
||||
/// }
|
||||
///
|
||||
/// rx.recv().unwrap();
|
||||
@ -90,7 +90,7 @@ use sys_common::mutex as sys;
|
||||
/// let lock = Arc::new(Mutex::new(0u));
|
||||
/// let lock2 = lock.clone();
|
||||
///
|
||||
/// let _ = Thread::spawn(move || -> () {
|
||||
/// let _ = Thread::scoped(move || -> () {
|
||||
/// // This thread will acquire the mutex first, unwrapping the result of
|
||||
/// // `lock` because the lock has not been poisoned.
|
||||
/// let _lock = lock2.lock().unwrap();
|
||||
@ -376,9 +376,9 @@ mod test {
|
||||
let (tx, rx) = channel();
|
||||
for _ in range(0, K) {
|
||||
let tx2 = tx.clone();
|
||||
Thread::spawn(move|| { inc(); tx2.send(()).unwrap(); }).detach();
|
||||
Thread::spawn(move|| { inc(); tx2.send(()).unwrap(); });
|
||||
let tx2 = tx.clone();
|
||||
Thread::spawn(move|| { inc(); tx2.send(()).unwrap(); }).detach();
|
||||
Thread::spawn(move|| { inc(); tx2.send(()).unwrap(); });
|
||||
}
|
||||
|
||||
drop(tx);
|
||||
@ -453,7 +453,7 @@ mod test {
|
||||
fn test_mutex_arc_poison() {
|
||||
let arc = Arc::new(Mutex::new(1i));
|
||||
let arc2 = arc.clone();
|
||||
let _ = Thread::spawn(move|| {
|
||||
let _ = Thread::scoped(move|| {
|
||||
let lock = arc2.lock().unwrap();
|
||||
assert_eq!(*lock, 2);
|
||||
}).join();
|
||||
@ -480,7 +480,7 @@ mod test {
|
||||
fn test_mutex_arc_access_in_unwind() {
|
||||
let arc = Arc::new(Mutex::new(1i));
|
||||
let arc2 = arc.clone();
|
||||
let _ = Thread::spawn(move|| -> () {
|
||||
let _ = Thread::scoped(move|| -> () {
|
||||
struct Unwinder {
|
||||
i: Arc<Mutex<int>>,
|
||||
}
|
||||
|
@ -159,7 +159,7 @@ mod test {
|
||||
assert!(run);
|
||||
}
|
||||
tx.send(()).unwrap();
|
||||
}).detach();
|
||||
});
|
||||
}
|
||||
|
||||
unsafe {
|
||||
|
@ -411,7 +411,7 @@ mod tests {
|
||||
}
|
||||
}
|
||||
drop(tx);
|
||||
}).detach();
|
||||
});
|
||||
}
|
||||
drop(tx);
|
||||
let _ = rx.recv();
|
||||
@ -422,7 +422,7 @@ mod tests {
|
||||
fn test_rw_arc_poison_wr() {
|
||||
let arc = Arc::new(RwLock::new(1i));
|
||||
let arc2 = arc.clone();
|
||||
let _: Result<uint, _> = Thread::spawn(move|| {
|
||||
let _: Result<uint, _> = Thread::scoped(move|| {
|
||||
let _lock = arc2.write().unwrap();
|
||||
panic!();
|
||||
}).join();
|
||||
@ -433,7 +433,7 @@ mod tests {
|
||||
fn test_rw_arc_poison_ww() {
|
||||
let arc = Arc::new(RwLock::new(1i));
|
||||
let arc2 = arc.clone();
|
||||
let _: Result<uint, _> = Thread::spawn(move|| {
|
||||
let _: Result<uint, _> = Thread::scoped(move|| {
|
||||
let _lock = arc2.write().unwrap();
|
||||
panic!();
|
||||
}).join();
|
||||
@ -444,7 +444,7 @@ mod tests {
|
||||
fn test_rw_arc_no_poison_rr() {
|
||||
let arc = Arc::new(RwLock::new(1i));
|
||||
let arc2 = arc.clone();
|
||||
let _: Result<uint, _> = Thread::spawn(move|| {
|
||||
let _: Result<uint, _> = Thread::scoped(move|| {
|
||||
let _lock = arc2.read().unwrap();
|
||||
panic!();
|
||||
}).join();
|
||||
@ -455,7 +455,7 @@ mod tests {
|
||||
fn test_rw_arc_no_poison_rw() {
|
||||
let arc = Arc::new(RwLock::new(1i));
|
||||
let arc2 = arc.clone();
|
||||
let _: Result<uint, _> = Thread::spawn(move|| {
|
||||
let _: Result<uint, _> = Thread::scoped(move|| {
|
||||
let _lock = arc2.read().unwrap();
|
||||
panic!()
|
||||
}).join();
|
||||
@ -478,13 +478,13 @@ mod tests {
|
||||
*lock = tmp + 1;
|
||||
}
|
||||
tx.send(()).unwrap();
|
||||
}).detach();
|
||||
});
|
||||
|
||||
// Readers try to catch the writer in the act
|
||||
let mut children = Vec::new();
|
||||
for _ in range(0u, 5) {
|
||||
let arc3 = arc.clone();
|
||||
children.push(Thread::spawn(move|| {
|
||||
children.push(Thread::scoped(move|| {
|
||||
let lock = arc3.read().unwrap();
|
||||
assert!(*lock >= 0);
|
||||
}));
|
||||
@ -505,7 +505,7 @@ mod tests {
|
||||
fn test_rw_arc_access_in_unwind() {
|
||||
let arc = Arc::new(RwLock::new(1i));
|
||||
let arc2 = arc.clone();
|
||||
let _ = Thread::spawn(move|| -> () {
|
||||
let _ = Thread::scoped(move|| -> () {
|
||||
struct Unwinder {
|
||||
i: Arc<RwLock<int>>,
|
||||
}
|
||||
|
@ -193,7 +193,7 @@ mod tests {
|
||||
tx.send(()).unwrap();
|
||||
drop(s2.access());
|
||||
tx.send(()).unwrap();
|
||||
}).detach();
|
||||
});
|
||||
rx.recv().unwrap(); // wait for child to come alive
|
||||
}
|
||||
rx.recv().unwrap(); // wait for child to be done
|
||||
|
@ -132,7 +132,7 @@ fn spawn_in_pool(jobs: Arc<Mutex<Receiver<Thunk>>>) {
|
||||
}
|
||||
|
||||
sentinel.cancel();
|
||||
}).detach();
|
||||
});
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
|
@ -99,7 +99,7 @@ impl<M: Send> Helper<M> {
|
||||
let _g = self.lock.lock().unwrap();
|
||||
*self.shutdown.get() = true;
|
||||
self.cond.notify_one()
|
||||
}).detach();
|
||||
});
|
||||
|
||||
rt::at_exit(move|:| { self.shutdown() });
|
||||
*self.initialized.get() = true;
|
||||
|
@ -332,9 +332,6 @@ pub struct Thread {
|
||||
inner: Arc<Inner>,
|
||||
}
|
||||
|
||||
#[stable]
|
||||
unsafe impl Sync for Thread {}
|
||||
|
||||
impl Thread {
|
||||
// Used only internally to construct a thread object without spawning
|
||||
fn new(name: Option<String>) -> Thread {
|
||||
@ -520,14 +517,14 @@ mod test {
|
||||
|
||||
#[test]
|
||||
fn test_unnamed_thread() {
|
||||
Thread::spawn(move|| {
|
||||
Thread::scoped(move|| {
|
||||
assert!(Thread::current().name().is_none());
|
||||
}).join().map_err(|_| ()).unwrap();
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_named_thread() {
|
||||
Builder::new().name("ada lovelace".to_string()).spawn(move|| {
|
||||
Builder::new().name("ada lovelace".to_string()).scoped(move|| {
|
||||
assert!(Thread::current().name().unwrap() == "ada lovelace".to_string());
|
||||
}).join().map_err(|_| ()).unwrap();
|
||||
}
|
||||
@ -537,13 +534,13 @@ mod test {
|
||||
let (tx, rx) = channel();
|
||||
Thread::spawn(move|| {
|
||||
tx.send(()).unwrap();
|
||||
}).detach();
|
||||
});
|
||||
rx.recv().unwrap();
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_join_success() {
|
||||
match Thread::spawn(move|| -> String {
|
||||
match Thread::scoped(move|| -> String {
|
||||
"Success!".to_string()
|
||||
}).join().as_ref().map(|s| s.as_slice()) {
|
||||
result::Result::Ok("Success!") => (),
|
||||
@ -553,7 +550,7 @@ mod test {
|
||||
|
||||
#[test]
|
||||
fn test_join_panic() {
|
||||
match Thread::spawn(move|| {
|
||||
match Thread::scoped(move|| {
|
||||
panic!()
|
||||
}).join() {
|
||||
result::Result::Err(_) => (),
|
||||
@ -575,7 +572,7 @@ mod test {
|
||||
} else {
|
||||
f(i - 1, tx);
|
||||
}
|
||||
}).detach();
|
||||
});
|
||||
|
||||
}
|
||||
f(10, tx);
|
||||
@ -589,8 +586,8 @@ mod test {
|
||||
Thread::spawn(move|| {
|
||||
Thread::spawn(move|| {
|
||||
tx.send(()).unwrap();
|
||||
}).detach();
|
||||
}).detach();
|
||||
});
|
||||
});
|
||||
|
||||
rx.recv().unwrap();
|
||||
}
|
||||
@ -613,7 +610,7 @@ mod test {
|
||||
#[test]
|
||||
fn test_avoid_copying_the_body_spawn() {
|
||||
avoid_copying_the_body(|v| {
|
||||
Thread::spawn(move || v.invoke(())).detach();
|
||||
Thread::spawn(move || v.invoke(()));
|
||||
});
|
||||
}
|
||||
|
||||
@ -622,14 +619,14 @@ mod test {
|
||||
avoid_copying_the_body(|f| {
|
||||
Thread::spawn(move|| {
|
||||
f.invoke(());
|
||||
}).detach();
|
||||
});
|
||||
})
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_avoid_copying_the_body_join() {
|
||||
avoid_copying_the_body(|f| {
|
||||
let _ = Thread::spawn(move|| {
|
||||
let _ = Thread::scoped(move|| {
|
||||
f.invoke(())
|
||||
}).join();
|
||||
})
|
||||
@ -645,21 +642,21 @@ mod test {
|
||||
fn child_no(x: uint) -> Thunk {
|
||||
return Thunk::new(move|| {
|
||||
if x < GENERATIONS {
|
||||
Thread::spawn(move|| child_no(x+1).invoke(())).detach();
|
||||
Thread::spawn(move|| child_no(x+1).invoke(()));
|
||||
}
|
||||
});
|
||||
}
|
||||
Thread::spawn(|| child_no(0).invoke(())).detach();
|
||||
Thread::spawn(|| child_no(0).invoke(()));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_simple_newsched_spawn() {
|
||||
Thread::spawn(move || {}).detach();
|
||||
Thread::spawn(move || {});
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_try_panic_message_static_str() {
|
||||
match Thread::spawn(move|| {
|
||||
match Thread::scoped(move|| {
|
||||
panic!("static string");
|
||||
}).join() {
|
||||
Err(e) => {
|
||||
@ -673,7 +670,7 @@ mod test {
|
||||
|
||||
#[test]
|
||||
fn test_try_panic_message_owned_str() {
|
||||
match Thread::spawn(move|| {
|
||||
match Thread::scoped(move|| {
|
||||
panic!("owned string".to_string());
|
||||
}).join() {
|
||||
Err(e) => {
|
||||
@ -687,7 +684,7 @@ mod test {
|
||||
|
||||
#[test]
|
||||
fn test_try_panic_message_any() {
|
||||
match Thread::spawn(move|| {
|
||||
match Thread::scoped(move|| {
|
||||
panic!(box 413u16 as Box<Any + Send>);
|
||||
}).join() {
|
||||
Err(e) => {
|
||||
@ -705,7 +702,7 @@ mod test {
|
||||
fn test_try_panic_message_unit_struct() {
|
||||
struct Juju;
|
||||
|
||||
match Thread::spawn(move|| {
|
||||
match Thread::scoped(move|| {
|
||||
panic!(Juju)
|
||||
}).join() {
|
||||
Err(ref e) if e.is::<Juju>() => {}
|
||||
@ -719,7 +716,7 @@ mod test {
|
||||
let mut reader = ChanReader::new(rx);
|
||||
let stdout = ChanWriter::new(tx);
|
||||
|
||||
let r = Builder::new().stdout(box stdout as Box<Writer + Send>).spawn(move|| {
|
||||
let r = Builder::new().stdout(box stdout as Box<Writer + Send>).scoped(move|| {
|
||||
print!("Hello, world!");
|
||||
}).join();
|
||||
assert!(r.is_ok());
|
||||
|
@ -87,7 +87,7 @@ pub mod __impl {
|
||||
/// assert_eq!(*f.borrow(), 1);
|
||||
/// *f.borrow_mut() = 3;
|
||||
/// });
|
||||
/// }).detach();
|
||||
/// });
|
||||
///
|
||||
/// // we retain our original value of 2 despite the child thread
|
||||
/// FOO.with(|f| {
|
||||
@ -581,7 +581,7 @@ mod tests {
|
||||
}
|
||||
thread_local!(static FOO: Foo = foo());
|
||||
|
||||
Thread::spawn(|| {
|
||||
Thread::scoped(|| {
|
||||
assert!(FOO.state() == State::Uninitialized);
|
||||
FOO.with(|_| {
|
||||
assert!(FOO.state() == State::Valid);
|
||||
@ -645,7 +645,7 @@ mod tests {
|
||||
}
|
||||
}
|
||||
|
||||
Thread::spawn(move|| {
|
||||
Thread::scoped(move|| {
|
||||
drop(S1);
|
||||
}).join().ok().unwrap();
|
||||
}
|
||||
@ -663,7 +663,7 @@ mod tests {
|
||||
}
|
||||
}
|
||||
|
||||
Thread::spawn(move|| unsafe {
|
||||
Thread::scoped(move|| unsafe {
|
||||
K1.with(|s| *s.get() = Some(S1));
|
||||
}).join().ok().unwrap();
|
||||
}
|
||||
|
@ -1137,11 +1137,11 @@ pub fn run_test(opts: &TestOpts,
|
||||
cfg = cfg.stderr(box stderr as Box<Writer + Send>);
|
||||
}
|
||||
|
||||
let result_guard = cfg.spawn(move || { testfn.invoke(()) });
|
||||
let result_guard = cfg.scoped(move || { testfn.invoke(()) });
|
||||
let stdout = reader.read_to_end().unwrap().into_iter().collect();
|
||||
let test_result = calc_result(&desc, result_guard.join());
|
||||
monitor_ch.send((desc.clone(), test_result, stdout)).unwrap();
|
||||
}).detach();
|
||||
});
|
||||
}
|
||||
|
||||
match testfn {
|
||||
|
@ -15,6 +15,6 @@ pub fn foo<T:Send + Clone>(x: T) -> Receiver<T> {
|
||||
let (tx, rx) = channel();
|
||||
Thread::spawn(move|| {
|
||||
tx.send(x.clone());
|
||||
}).detach();
|
||||
});
|
||||
rx
|
||||
}
|
||||
|
@ -64,7 +64,7 @@ fn run(args: &[String]) {
|
||||
let mut worker_results = Vec::new();
|
||||
for _ in range(0u, workers) {
|
||||
let to_child = to_child.clone();
|
||||
worker_results.push(Thread::spawn(move|| {
|
||||
worker_results.push(Thread::scoped(move|| {
|
||||
for _ in range(0u, size / workers) {
|
||||
//println!("worker {}: sending {} bytes", i, num_bytes);
|
||||
to_child.send(request::bytes(num_bytes)).unwrap();
|
||||
@ -74,7 +74,7 @@ fn run(args: &[String]) {
|
||||
}
|
||||
Thread::spawn(move|| {
|
||||
server(&from_parent, &to_parent);
|
||||
}).detach();
|
||||
});
|
||||
|
||||
for r in worker_results.into_iter() {
|
||||
let _ = r.join();
|
||||
|
@ -59,7 +59,7 @@ fn run(args: &[String]) {
|
||||
let mut worker_results = Vec::new();
|
||||
let from_parent = if workers == 1 {
|
||||
let (to_child, from_parent) = channel();
|
||||
worker_results.push(Thread::spawn(move|| {
|
||||
worker_results.push(Thread::scoped(move|| {
|
||||
for _ in range(0u, size / workers) {
|
||||
//println!("worker {}: sending {} bytes", i, num_bytes);
|
||||
to_child.send(request::bytes(num_bytes));
|
||||
@ -71,7 +71,7 @@ fn run(args: &[String]) {
|
||||
let (to_child, from_parent) = channel();
|
||||
for _ in range(0u, workers) {
|
||||
let to_child = to_child.clone();
|
||||
worker_results.push(Thread::spawn(move|| {
|
||||
worker_results.push(Thread::scoped(move|| {
|
||||
for _ in range(0u, size / workers) {
|
||||
//println!("worker {}: sending {} bytes", i, num_bytes);
|
||||
to_child.send(request::bytes(num_bytes));
|
||||
@ -83,7 +83,7 @@ fn run(args: &[String]) {
|
||||
};
|
||||
Thread::spawn(move|| {
|
||||
server(&from_parent, &to_parent);
|
||||
}).detach();
|
||||
});
|
||||
|
||||
for r in worker_results.into_iter() {
|
||||
let _ = r.join();
|
||||
|
@ -35,7 +35,7 @@ fn ping_pong_bench(n: uint, m: uint) {
|
||||
// Create a channel: B->A
|
||||
let (btx, brx) = channel();
|
||||
|
||||
let guard_a = Thread::spawn(move|| {
|
||||
let guard_a = Thread::scoped(move|| {
|
||||
let (tx, rx) = (atx, brx);
|
||||
for _ in range(0, n) {
|
||||
tx.send(()).unwrap();
|
||||
@ -43,7 +43,7 @@ fn ping_pong_bench(n: uint, m: uint) {
|
||||
}
|
||||
});
|
||||
|
||||
let guard_b = Thread::spawn(move|| {
|
||||
let guard_b = Thread::scoped(move|| {
|
||||
let (tx, rx) = (btx, arx);
|
||||
for _ in range(0, n) {
|
||||
rx.recv().unwrap();
|
||||
|
@ -25,7 +25,7 @@ fn parfib(n: uint) -> uint {
|
||||
let (tx, rx) = channel();
|
||||
Thread::spawn(move|| {
|
||||
tx.send(parfib(n-1));
|
||||
}).detach();
|
||||
});
|
||||
let m2 = parfib(n-2);
|
||||
return (rx.recv().unwrap() + m2);
|
||||
}
|
||||
|
@ -95,7 +95,7 @@ fn main() {
|
||||
let mut messages = range_step(min_depth, max_depth + 1, 2).map(|depth| {
|
||||
use std::num::Int;
|
||||
let iterations = 2i.pow((max_depth - depth + min_depth) as uint);
|
||||
Thread::spawn(move|| {
|
||||
Thread::scoped(move|| {
|
||||
let mut chk = 0;
|
||||
for i in range(1, iterations + 1) {
|
||||
let arena = TypedArena::new();
|
||||
|
@ -195,7 +195,7 @@ fn rendezvous(nn: uint, set: Vec<Color>) {
|
||||
from_rendezvous,
|
||||
to_rendezvous,
|
||||
to_rendezvous_log);
|
||||
}).detach();
|
||||
});
|
||||
to_creature
|
||||
}).collect();
|
||||
|
||||
|
@ -168,7 +168,7 @@ fn fannkuch(n: i32) -> (i32, i32) {
|
||||
for (i, j) in range(0, N).zip(iter::count(0, k)) {
|
||||
let max = cmp::min(j+k, perm.max());
|
||||
|
||||
futures.push(Thread::spawn(move|| {
|
||||
futures.push(Thread::scoped(move|| {
|
||||
work(perm, j as uint, max as uint)
|
||||
}))
|
||||
}
|
||||
|
@ -173,7 +173,7 @@ fn main() {
|
||||
|
||||
Thread::spawn(move|| {
|
||||
make_sequence_processor(sz, &from_parent, &to_parent_);
|
||||
}).detach();
|
||||
});
|
||||
|
||||
to_child
|
||||
}).collect::<Vec<Sender<Vec<u8> >> >();
|
||||
|
@ -304,11 +304,11 @@ fn main() {
|
||||
|
||||
let nb_freqs: Vec<_> = range(1u, 3).map(|i| {
|
||||
let input = input.clone();
|
||||
(i, Thread::spawn(move|| generate_frequencies(input.as_slice(), i)))
|
||||
(i, Thread::scoped(move|| generate_frequencies(input.as_slice(), i)))
|
||||
}).collect();
|
||||
let occ_freqs: Vec<_> = OCCURRENCES.iter().map(|&occ| {
|
||||
let input = input.clone();
|
||||
Thread::spawn(move|| generate_frequencies(input.as_slice(), occ.len()))
|
||||
Thread::scoped(move|| generate_frequencies(input.as_slice(), occ.len()))
|
||||
}).collect();
|
||||
|
||||
for (i, freq) in nb_freqs.into_iter() {
|
||||
|
@ -82,7 +82,7 @@ fn mandelbrot<W: io::Writer>(w: uint, mut out: W) -> io::IoResult<()> {
|
||||
let mut precalc_i = Vec::with_capacity(h);
|
||||
|
||||
let precalc_futures = range(0, WORKERS).map(|i| {
|
||||
Thread::spawn(move|| {
|
||||
Thread::scoped(move|| {
|
||||
let mut rs = Vec::with_capacity(w / WORKERS);
|
||||
let mut is = Vec::with_capacity(w / WORKERS);
|
||||
|
||||
@ -123,7 +123,7 @@ fn mandelbrot<W: io::Writer>(w: uint, mut out: W) -> io::IoResult<()> {
|
||||
let vec_init_r = arc_init_r.clone();
|
||||
let vec_init_i = arc_init_i.clone();
|
||||
|
||||
Thread::spawn(move|| {
|
||||
Thread::scoped(move|| {
|
||||
let mut res: Vec<u8> = Vec::with_capacity((chunk_size * w) / 8);
|
||||
let init_r_slice = vec_init_r.as_slice();
|
||||
|
||||
|
@ -321,7 +321,7 @@ fn par_search(masks: Vec<Vec<Vec<u64>>>) -> Data {
|
||||
let mut data = Data::new();
|
||||
search(&*masks, m, 1, List::Cons(m, &List::Nil), &mut data);
|
||||
tx.send(data).unwrap();
|
||||
}).detach();
|
||||
});
|
||||
}
|
||||
|
||||
// collecting the results
|
||||
|
@ -35,15 +35,15 @@ fn fib(n: int) -> int {
|
||||
} else {
|
||||
let (tx1, rx) = channel();
|
||||
let tx2 = tx1.clone();
|
||||
Thread::spawn(move|| pfib(&tx2, n - 1)).detach();
|
||||
Thread::spawn(move|| pfib(&tx2, n - 1));
|
||||
let tx2 = tx1.clone();
|
||||
Thread::spawn(move|| pfib(&tx2, n - 2)).detach();
|
||||
Thread::spawn(move|| pfib(&tx2, n - 2));
|
||||
tx.send(rx.recv().unwrap() + rx.recv().unwrap());
|
||||
}
|
||||
}
|
||||
|
||||
let (tx, rx) = channel();
|
||||
Thread::spawn(move|| pfib(&tx, n) ).detach();
|
||||
Thread::spawn(move|| pfib(&tx, n) );
|
||||
rx.recv().unwrap()
|
||||
}
|
||||
|
||||
@ -78,7 +78,7 @@ fn stress_task(id: int) {
|
||||
fn stress(num_tasks: int) {
|
||||
let mut results = Vec::new();
|
||||
for i in range(0, num_tasks) {
|
||||
results.push(Thread::spawn(move|| {
|
||||
results.push(Thread::scoped(move|| {
|
||||
stress_task(i);
|
||||
}));
|
||||
}
|
||||
|
@ -46,10 +46,10 @@ fn start(n_tasks: int, token: int) {
|
||||
tx.send(token);
|
||||
for i in range(2, n_tasks + 1) {
|
||||
let (tx, next_rx) = channel();
|
||||
Thread::spawn(move|| roundtrip(i, tx, rx)).detach();
|
||||
Thread::spawn(move|| roundtrip(i, tx, rx));
|
||||
rx = next_rx;
|
||||
}
|
||||
Thread::spawn(move|| roundtrip(1, tx, rx)).detach();
|
||||
Thread::spawn(move|| roundtrip(1, tx, rx));
|
||||
}
|
||||
|
||||
fn roundtrip(id: int, tx: Sender<int>, rx: Receiver<int>) {
|
||||
|
@ -36,7 +36,7 @@ fn main() {
|
||||
fn run(repeat: int, depth: int) {
|
||||
for _ in range(0, repeat) {
|
||||
let dur = Duration::span(|| {
|
||||
let _ = Thread::spawn(move|| {
|
||||
let _ = Thread::scoped(move|| {
|
||||
recurse_or_panic(depth, None)
|
||||
}).join();
|
||||
});
|
||||
|
@ -35,7 +35,7 @@ fn child_generation(gens_left: uint, tx: Sender<()>) {
|
||||
} else {
|
||||
tx.send(()).unwrap()
|
||||
}
|
||||
}).detach();
|
||||
});
|
||||
}
|
||||
|
||||
fn main() {
|
||||
|
@ -15,7 +15,7 @@ use std::thread::Thread;
|
||||
fn f(n: uint) {
|
||||
let mut i = 0u;
|
||||
while i < n {
|
||||
let _ = Thread::spawn(move|| g()).join();
|
||||
let _ = Thread::scoped(move|| g()).join();
|
||||
i += 1u;
|
||||
}
|
||||
}
|
||||
@ -33,5 +33,5 @@ fn main() {
|
||||
};
|
||||
let n = args[1].parse().unwrap();
|
||||
let mut i = 0u;
|
||||
while i < n { Thread::spawn(move|| f(n) ).detach(); i += 1u; }
|
||||
while i < n { Thread::spawn(move|| f(n) ); i += 1u; }
|
||||
}
|
||||
|
@ -13,7 +13,7 @@
|
||||
use std::thread::Thread;
|
||||
|
||||
fn main() {
|
||||
let r: Result<int,_> = Thread::spawn(move|| {
|
||||
let r: Result<int,_> = Thread::scoped(move|| {
|
||||
panic!("test");
|
||||
1i
|
||||
}).join();
|
||||
|
@ -13,7 +13,7 @@
|
||||
use std::thread::Builder;
|
||||
|
||||
fn main() {
|
||||
let r: Result<int,_> = Builder::new().name("owned name".to_string()).spawn(move|| {
|
||||
let r: Result<int,_> = Builder::new().name("owned name".to_string()).scoped(move|| {
|
||||
panic!("test");
|
||||
1i
|
||||
}).join();
|
||||
|
@ -15,7 +15,7 @@ use std::thread::Thread;
|
||||
fn main() {
|
||||
// the purpose of this test is to make sure that task::spawn()
|
||||
// works when provided with a bare function:
|
||||
let r = Thread::spawn(startfn).join();
|
||||
let r = Thread::scoped(startfn).join();
|
||||
if r.is_err() {
|
||||
panic!()
|
||||
}
|
||||
|
@ -22,7 +22,7 @@ impl Drop for A {
|
||||
}
|
||||
|
||||
fn main() {
|
||||
Thread::spawn(move|| {
|
||||
Thread::scoped(move|| {
|
||||
let _a = A;
|
||||
lib::callback(|| panic!());
|
||||
1i
|
||||
|
@ -45,5 +45,5 @@ pub fn fails() {
|
||||
}
|
||||
|
||||
pub fn main() {
|
||||
Thread::spawn(fails).join();
|
||||
Thread::scoped(fails).join();
|
||||
}
|
||||
|
@ -90,7 +90,7 @@ pub fn test_destroy_actually_kills(force: bool) {
|
||||
_ = rx2.recv() => unsafe { libc::exit(1) },
|
||||
_ = rx1.recv() => {}
|
||||
}
|
||||
}).detach();
|
||||
});
|
||||
match p.wait().unwrap() {
|
||||
ExitStatus(..) => panic!("expected a signal"),
|
||||
ExitSignal(..) => tx.send(()).unwrap(),
|
||||
|
@ -21,7 +21,7 @@ extern {
|
||||
|
||||
pub fn main() {
|
||||
unsafe {
|
||||
Thread::spawn(move|| {
|
||||
Thread::scoped(move|| {
|
||||
let i = &100i;
|
||||
rust_dbg_call(callback, mem::transmute(i));
|
||||
}).join();
|
||||
|
@ -1,4 +1,3 @@
|
||||
|
||||
// Copyright 2012-2014 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
@ -37,7 +36,7 @@ mod map_reduce {
|
||||
for i in inputs.iter() {
|
||||
let ctrl = ctrl.clone();
|
||||
let i = i.clone();
|
||||
Thread::spawn(move|| map_task(ctrl.clone(), i.clone()) ).detach();
|
||||
Thread::spawn(move|| map_task(ctrl.clone(), i.clone()) );
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -12,7 +12,7 @@ use std::time::Duration;
|
||||
use std::thread::Thread;
|
||||
|
||||
fn main() {
|
||||
Thread::spawn(move|| customtask()).join().ok().unwrap();
|
||||
Thread::scoped(move|| customtask()).join().ok().unwrap();
|
||||
}
|
||||
|
||||
fn customtask() {
|
||||
|
@ -22,7 +22,7 @@ fn helper(rx: Receiver<Sender<()>>) {
|
||||
|
||||
fn main() {
|
||||
let (tx, rx) = channel();
|
||||
let _t = Thread::spawn(move|| { helper(rx) }).detach();
|
||||
let _t = Thread::spawn(move|| { helper(rx) });
|
||||
let (snd, rcv) = channel::<int>();
|
||||
for _ in range(1i, 100000i) {
|
||||
snd.send(1i).unwrap();
|
||||
|
@ -20,7 +20,7 @@ fn main() {
|
||||
// Check that both closures are capturing by value
|
||||
assert_eq!(1, mem::size_of_val(&closure));
|
||||
|
||||
Thread::spawn(move|| {
|
||||
Thread::scoped(move|| {
|
||||
let ok = closure;
|
||||
}).join().ok().unwrap();
|
||||
}
|
||||
|
@ -24,5 +24,5 @@ pub fn main() {
|
||||
let mut stdin = std::io::stdin();
|
||||
Thread::spawn(move|| {
|
||||
let _ = stdin.read_to_end();
|
||||
}).detach();
|
||||
});
|
||||
}
|
||||
|
@ -14,7 +14,7 @@ use std::thunk::Thunk;
|
||||
static generations: uint = 1024+256+128+49;
|
||||
|
||||
fn spawn(f: Thunk) {
|
||||
Builder::new().stack_size(32 * 1024).spawn(move|| f.invoke(())).detach()
|
||||
Builder::new().stack_size(32 * 1024).spawn(move|| f.invoke(()));
|
||||
}
|
||||
|
||||
fn child_no(x: uint) -> Thunk {
|
||||
|
@ -17,7 +17,7 @@ pub fn main() {
|
||||
|
||||
tx.send("hello, world").unwrap();
|
||||
|
||||
Thread::spawn(move|| {
|
||||
Thread::scoped(move|| {
|
||||
println(rx.recv().unwrap());
|
||||
}).join().ok().unwrap();
|
||||
}
|
||||
|
@ -14,7 +14,7 @@ use std::thread::Thread;
|
||||
pub fn main() {
|
||||
let (tx, rx) = channel::<&'static str>();
|
||||
|
||||
let t = Thread::spawn(move|| {
|
||||
let t = Thread::scoped(move|| {
|
||||
assert_eq!(rx.recv().unwrap(), "hello, world");
|
||||
});
|
||||
|
||||
|
@ -12,24 +12,24 @@ use std::{int, i8, i16, i32, i64};
|
||||
use std::thread::Thread;
|
||||
|
||||
fn main() {
|
||||
assert!(Thread::spawn(move|| int::MIN / -1).join().is_err());
|
||||
assert!(Thread::spawn(move|| i8::MIN / -1).join().is_err());
|
||||
assert!(Thread::spawn(move|| i16::MIN / -1).join().is_err());
|
||||
assert!(Thread::spawn(move|| i32::MIN / -1).join().is_err());
|
||||
assert!(Thread::spawn(move|| i64::MIN / -1).join().is_err());
|
||||
assert!(Thread::spawn(move|| 1i / 0).join().is_err());
|
||||
assert!(Thread::spawn(move|| 1i8 / 0).join().is_err());
|
||||
assert!(Thread::spawn(move|| 1i16 / 0).join().is_err());
|
||||
assert!(Thread::spawn(move|| 1i32 / 0).join().is_err());
|
||||
assert!(Thread::spawn(move|| 1i64 / 0).join().is_err());
|
||||
assert!(Thread::spawn(move|| int::MIN % -1).join().is_err());
|
||||
assert!(Thread::spawn(move|| i8::MIN % -1).join().is_err());
|
||||
assert!(Thread::spawn(move|| i16::MIN % -1).join().is_err());
|
||||
assert!(Thread::spawn(move|| i32::MIN % -1).join().is_err());
|
||||
assert!(Thread::spawn(move|| i64::MIN % -1).join().is_err());
|
||||
assert!(Thread::spawn(move|| 1i % 0).join().is_err());
|
||||
assert!(Thread::spawn(move|| 1i8 % 0).join().is_err());
|
||||
assert!(Thread::spawn(move|| 1i16 % 0).join().is_err());
|
||||
assert!(Thread::spawn(move|| 1i32 % 0).join().is_err());
|
||||
assert!(Thread::spawn(move|| 1i64 % 0).join().is_err());
|
||||
assert!(Thread::scoped(move|| int::MIN / -1).join().is_err());
|
||||
assert!(Thread::scoped(move|| i8::MIN / -1).join().is_err());
|
||||
assert!(Thread::scoped(move|| i16::MIN / -1).join().is_err());
|
||||
assert!(Thread::scoped(move|| i32::MIN / -1).join().is_err());
|
||||
assert!(Thread::scoped(move|| i64::MIN / -1).join().is_err());
|
||||
assert!(Thread::scoped(move|| 1i / 0).join().is_err());
|
||||
assert!(Thread::scoped(move|| 1i8 / 0).join().is_err());
|
||||
assert!(Thread::scoped(move|| 1i16 / 0).join().is_err());
|
||||
assert!(Thread::scoped(move|| 1i32 / 0).join().is_err());
|
||||
assert!(Thread::scoped(move|| 1i64 / 0).join().is_err());
|
||||
assert!(Thread::scoped(move|| int::MIN % -1).join().is_err());
|
||||
assert!(Thread::scoped(move|| i8::MIN % -1).join().is_err());
|
||||
assert!(Thread::scoped(move|| i16::MIN % -1).join().is_err());
|
||||
assert!(Thread::scoped(move|| i32::MIN % -1).join().is_err());
|
||||
assert!(Thread::scoped(move|| i64::MIN % -1).join().is_err());
|
||||
assert!(Thread::scoped(move|| 1i % 0).join().is_err());
|
||||
assert!(Thread::scoped(move|| 1i8 % 0).join().is_err());
|
||||
assert!(Thread::scoped(move|| 1i16 % 0).join().is_err());
|
||||
assert!(Thread::scoped(move|| 1i32 % 0).join().is_err());
|
||||
assert!(Thread::scoped(move|| 1i64 % 0).join().is_err());
|
||||
}
|
||||
|
@ -26,7 +26,7 @@ fn periodical(n: int) -> Receiver<bool> {
|
||||
Err(..) => break
|
||||
}
|
||||
}
|
||||
}).detach();
|
||||
});
|
||||
return port;
|
||||
}
|
||||
|
||||
@ -41,7 +41,7 @@ fn integers() -> Receiver<int> {
|
||||
}
|
||||
i = i + 1;
|
||||
}
|
||||
}).detach();
|
||||
});
|
||||
return port;
|
||||
}
|
||||
|
||||
@ -58,4 +58,3 @@ fn main() {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -27,7 +27,7 @@ impl fmt::Show for Foo {
|
||||
}
|
||||
|
||||
pub fn main() {
|
||||
Thread::spawn(move|| {
|
||||
Thread::scoped(move|| {
|
||||
let mut f = Foo(Cell::new(0));
|
||||
println!("{}", f);
|
||||
let Foo(ref mut f) = f;
|
||||
|
@ -14,7 +14,7 @@ macro_rules! expr { ($e: expr) => { $e } }
|
||||
|
||||
macro_rules! spawn {
|
||||
($($code: tt)*) => {
|
||||
expr!(Thread::spawn(move|| {$($code)*}).detach())
|
||||
expr!(Thread::spawn(move|| {$($code)*}))
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -23,7 +23,7 @@ impl Drop for A {
|
||||
}
|
||||
|
||||
fn main() {
|
||||
Thread::spawn(move|| -> () {
|
||||
Thread::scoped(move|| -> () {
|
||||
let _a = A;
|
||||
panic!();
|
||||
}).join().unwrap_err();
|
||||
|
@ -33,10 +33,9 @@ impl Drop for B {
|
||||
}
|
||||
|
||||
pub fn main() {
|
||||
let ret = Thread::spawn(move|| {
|
||||
let ret = Thread::scoped(move|| {
|
||||
let _a = A { b: B { foo: 3 } };
|
||||
}).join();
|
||||
assert!(ret.is_err());
|
||||
unsafe { assert!(dropped); }
|
||||
}
|
||||
|
||||
|
@ -22,7 +22,7 @@ fn test05() {
|
||||
println!("{}", *three + n); // will copy x into the closure
|
||||
assert_eq!(*three, 3);
|
||||
};
|
||||
Thread::spawn(move|| {
|
||||
Thread::scoped(move|| {
|
||||
test05_start(fn_to_send);
|
||||
}).join().ok().unwrap();
|
||||
}
|
||||
|
@ -36,5 +36,5 @@ mod b {
|
||||
}
|
||||
|
||||
fn main() {
|
||||
Thread::spawn(move|| { ::b::g() }).join().unwrap_err();
|
||||
Thread::scoped(move|| { ::b::g() }).join().unwrap_err();
|
||||
}
|
||||
|
@ -28,6 +28,6 @@ fn foo() {
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let _ = Thread::spawn(move|| foo()).join();
|
||||
let _ = Thread::scoped(move|| foo()).join();
|
||||
unsafe { assert!(DTOR_COUNT == 2); }
|
||||
}
|
||||
|
@ -32,6 +32,6 @@ fn foo() {
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let _ = Thread::spawn(move|| foo()).join();
|
||||
let _ = Thread::scoped(move|| foo()).join();
|
||||
unsafe { assert!(DTOR_COUNT == 2); }
|
||||
}
|
||||
|
@ -25,6 +25,6 @@ fn iotask(_tx: &ctx, ip: String) {
|
||||
|
||||
pub fn main() {
|
||||
let (tx, _rx) = channel::<int>();
|
||||
let t = Thread::spawn(move|| iotask(&tx, "localhost".to_string()) );
|
||||
let t = Thread::scoped(move|| iotask(&tx, "localhost".to_string()) );
|
||||
t.join().ok().unwrap();
|
||||
}
|
||||
|
@ -11,7 +11,7 @@
|
||||
use std::thread::Thread;
|
||||
|
||||
pub fn main() {
|
||||
Thread::spawn(move|| child(10)).join().ok().unwrap();
|
||||
Thread::scoped(move|| child(10)).join().ok().unwrap();
|
||||
}
|
||||
|
||||
fn child(i: int) { println!("{}", i); assert!((i == 10)); }
|
||||
|
@ -11,7 +11,7 @@
|
||||
use std::thread::Thread;
|
||||
|
||||
pub fn main() {
|
||||
let t = Thread::spawn(move|| child((10, 20, 30, 40, 50, 60, 70, 80, 90)) );
|
||||
let t = Thread::scoped(move|| child((10, 20, 30, 40, 50, 60, 70, 80, 90)) );
|
||||
t.join().ok().unwrap();
|
||||
}
|
||||
|
||||
|
@ -17,5 +17,5 @@ use std::thread::Builder;
|
||||
|
||||
pub fn main() {
|
||||
let mut t = Builder::new();
|
||||
t.spawn(move|| ()).detach();
|
||||
t.spawn(move|| ());
|
||||
}
|
||||
|
@ -15,6 +15,6 @@ pub fn main() { test00(); }
|
||||
fn start() { println!("Started / Finished task."); }
|
||||
|
||||
fn test00() {
|
||||
let _ = Thread::spawn(move|| start() ).join();
|
||||
let _ = Thread::scoped(move|| start() ).join();
|
||||
println!("Completing.");
|
||||
}
|
||||
|
@ -16,7 +16,7 @@ fn start(_task_number: int) { println!("Started / Finished task."); }
|
||||
|
||||
fn test00() {
|
||||
let i: int = 0;
|
||||
let mut result = Thread::spawn(move|| {
|
||||
let mut result = Thread::scoped(move|| {
|
||||
start(i)
|
||||
});
|
||||
|
||||
|
@ -19,6 +19,6 @@ fn start(tx: &Sender<int>, start: int, number_of_messages: int) {
|
||||
pub fn main() {
|
||||
println!("Check that we don't deadlock.");
|
||||
let (tx, rx) = channel();
|
||||
let _ = Thread::spawn(move|| { start(&tx, 0, 10) }).join();
|
||||
let _ = Thread::scoped(move|| { start(&tx, 0, 10) }).join();
|
||||
println!("Joined task");
|
||||
}
|
||||
|
@ -19,7 +19,7 @@ pub fn main() {
|
||||
while (i > 0) {
|
||||
println!("{}", i);
|
||||
let tx = tx.clone();
|
||||
Thread::spawn({let i = i; move|| { child(i, &tx) }}).detach();
|
||||
Thread::spawn({let i = i; move|| { child(i, &tx) }});
|
||||
i = i - 1;
|
||||
}
|
||||
|
||||
|
@ -18,5 +18,5 @@ fn f() {
|
||||
}
|
||||
|
||||
pub fn main() {
|
||||
let _t = Thread::spawn(move|| f() ).join();
|
||||
let _t = Thread::scoped(move|| f() ).join();
|
||||
}
|
||||
|
@ -40,7 +40,7 @@ fn test00() {
|
||||
let mut results = Vec::new();
|
||||
while i < number_of_tasks {
|
||||
let tx = tx.clone();
|
||||
results.push(Thread::spawn({
|
||||
results.push(Thread::scoped({
|
||||
let i = i;
|
||||
move|| {
|
||||
test00_start(&tx, i, number_of_messages)
|
||||
|
@ -24,7 +24,7 @@ fn test00() {
|
||||
let (tx, rx) = channel();
|
||||
let number_of_messages: int = 10;
|
||||
|
||||
let result = Thread::spawn(move|| {
|
||||
let result = Thread::scoped(move|| {
|
||||
test00_start(&tx, number_of_messages);
|
||||
});
|
||||
|
||||
|
@ -17,7 +17,7 @@ fn main() {
|
||||
let mut reader = ChanReader::new(rx);
|
||||
let stderr = ChanWriter::new(tx);
|
||||
|
||||
let res = thread::Builder::new().stderr(box stderr as Box<Writer + Send>).spawn(move|| -> () {
|
||||
let res = thread::Builder::new().stderr(box stderr as Box<Writer + Send>).scoped(move|| -> () {
|
||||
panic!("Hello, world!")
|
||||
}).join();
|
||||
assert!(res.is_err());
|
||||
|
@ -52,7 +52,7 @@ fn test() {
|
||||
}
|
||||
}
|
||||
srv_tx.send(());
|
||||
}).detach();
|
||||
});
|
||||
}
|
||||
|
||||
for _ in range(0, N) {
|
||||
@ -62,7 +62,7 @@ fn test() {
|
||||
let _s = TcpStream::connect(addr).unwrap();
|
||||
}
|
||||
cli_tx.send(());
|
||||
}).detach();
|
||||
});
|
||||
}
|
||||
drop((cli_tx, srv_tx));
|
||||
|
||||
|
@ -29,7 +29,7 @@ fn main() {
|
||||
timer::sleep(Duration::milliseconds(30 * 1000));
|
||||
println!("timed out!");
|
||||
unsafe { libc::exit(1) }
|
||||
}).detach();
|
||||
});
|
||||
|
||||
let (tx, rx) = channel();
|
||||
Thread::spawn(move || -> () {
|
||||
@ -47,7 +47,7 @@ fn main() {
|
||||
stream.read_byte();
|
||||
stream.write(&[2]);
|
||||
}
|
||||
}).detach();
|
||||
});
|
||||
let addr = rx.recv().unwrap();
|
||||
|
||||
let (tx, rx) = channel();
|
||||
@ -64,7 +64,7 @@ fn main() {
|
||||
Err(e) => debug!("{}", e)
|
||||
}
|
||||
tx.send(()).unwrap();
|
||||
}).detach();
|
||||
});
|
||||
}
|
||||
|
||||
// Wait for all clients to exit, but don't wait for the server to exit. The
|
||||
|
@ -42,7 +42,7 @@ fn test_rm_tempdir() {
|
||||
tx.send(tmp.path().clone()).unwrap();
|
||||
panic!("panic to unwind past `tmp`");
|
||||
};
|
||||
let _ = Thread::spawn(f).join();
|
||||
let _ = Thread::scoped(f).join();
|
||||
let path = rx.recv().unwrap();
|
||||
assert!(!path.exists());
|
||||
|
||||
@ -52,7 +52,7 @@ fn test_rm_tempdir() {
|
||||
let _tmp = tmp;
|
||||
panic!("panic to unwind past `tmp`");
|
||||
};
|
||||
let _ = Thread::spawn(f).join();
|
||||
let _ = Thread::scoped(f).join();
|
||||
assert!(!path.exists());
|
||||
|
||||
let path;
|
||||
@ -60,7 +60,7 @@ fn test_rm_tempdir() {
|
||||
let f = move|:| {
|
||||
TempDir::new("test_rm_tempdir").unwrap()
|
||||
};
|
||||
let tmp = Thread::spawn(f).join().ok().expect("test_rm_tmdir");
|
||||
let tmp = Thread::scoped(f).join().ok().expect("test_rm_tmdir");
|
||||
path = tmp.path().clone();
|
||||
assert!(path.exists());
|
||||
}
|
||||
@ -84,7 +84,7 @@ fn test_rm_tempdir_close() {
|
||||
tmp.close();
|
||||
panic!("panic when unwinding past `tmp`");
|
||||
};
|
||||
let _ = Thread::spawn(f).join();
|
||||
let _ = Thread::scoped(f).join();
|
||||
let path = rx.recv().unwrap();
|
||||
assert!(!path.exists());
|
||||
|
||||
@ -95,7 +95,7 @@ fn test_rm_tempdir_close() {
|
||||
tmp.close();
|
||||
panic!("panic when unwinding past `tmp`");
|
||||
};
|
||||
let _ = Thread::spawn(f).join();
|
||||
let _ = Thread::scoped(f).join();
|
||||
assert!(!path.exists());
|
||||
|
||||
let path;
|
||||
@ -103,7 +103,7 @@ fn test_rm_tempdir_close() {
|
||||
let f = move|:| {
|
||||
TempDir::new("test_rm_tempdir").unwrap()
|
||||
};
|
||||
let tmp = Thread::spawn(f).join().ok().expect("test_rm_tmdir");
|
||||
let tmp = Thread::scoped(f).join().ok().expect("test_rm_tmdir");
|
||||
path = tmp.path().clone();
|
||||
assert!(path.exists());
|
||||
tmp.close();
|
||||
@ -177,7 +177,7 @@ pub fn test_rmdir_recursive_ok() {
|
||||
}
|
||||
|
||||
pub fn dont_double_panic() {
|
||||
let r: Result<(), _> = Thread::spawn(move|| {
|
||||
let r: Result<(), _> = Thread::scoped(move|| {
|
||||
let tmpdir = TempDir::new("test").unwrap();
|
||||
// Remove the temporary directory so that TempDir sees
|
||||
// an error on drop
|
||||
|
@ -22,13 +22,13 @@ fn test_ret() { let _x: Box<int> = return; }
|
||||
|
||||
fn test_panic() {
|
||||
fn f() { let _x: Box<int> = panic!(); }
|
||||
Thread::spawn(move|| f() ).join().err().unwrap();
|
||||
Thread::scoped(move|| f() ).join().err().unwrap();
|
||||
}
|
||||
|
||||
fn test_panic_indirect() {
|
||||
fn f() -> ! { panic!(); }
|
||||
fn g() { let _x: Box<int> = f(); }
|
||||
Thread::spawn(move|| g() ).join().err().unwrap();
|
||||
Thread::scoped(move|| g() ).join().err().unwrap();
|
||||
}
|
||||
|
||||
pub fn main() {
|
||||
|
@ -13,7 +13,7 @@ use std::thread::Thread;
|
||||
pub fn main() {
|
||||
let mut i = 10;
|
||||
while i > 0 {
|
||||
Thread::spawn({let i = i; move|| child(i)}).detach();
|
||||
Thread::spawn({let i = i; move|| child(i)});
|
||||
i = i - 1;
|
||||
}
|
||||
println!("main thread exiting");
|
||||
|
@ -23,7 +23,7 @@ pub fn main() {
|
||||
let tx = tx.clone();
|
||||
Thread::spawn(move|| {
|
||||
child(&tx, i)
|
||||
}).detach();
|
||||
});
|
||||
expected += i;
|
||||
}
|
||||
|
||||
|
@ -22,7 +22,7 @@ impl Drop for Foo {
|
||||
}
|
||||
|
||||
pub fn main() {
|
||||
let x = Thread::spawn(move|| {
|
||||
let x = Thread::scoped(move|| {
|
||||
let _b = Foo;
|
||||
}).join();
|
||||
|
||||
|
@ -77,7 +77,7 @@ pub fn main() {
|
||||
|
||||
let v = main.clone();
|
||||
|
||||
let _ = Thread::spawn(move|| {
|
||||
let _ = Thread::scoped(move|| {
|
||||
let mut v = v;
|
||||
let mut panic_countdown = panic_countdown;
|
||||
v.as_mut_slice().sort_by(|a, b| {
|
||||
|
@ -11,7 +11,7 @@
|
||||
use std::thread::Thread;
|
||||
|
||||
pub fn main() {
|
||||
let mut result = Thread::spawn(child);
|
||||
let mut result = Thread::scoped(child);
|
||||
println!("1");
|
||||
Thread::yield_now();
|
||||
println!("2");
|
||||
|
@ -11,7 +11,7 @@
|
||||
use std::thread::Thread;
|
||||
|
||||
pub fn main() {
|
||||
let mut result = Thread::spawn(child);
|
||||
let mut result = Thread::scoped(child);
|
||||
println!("1");
|
||||
Thread::yield_now();
|
||||
result.join();
|
||||
|
Loading…
Reference in New Issue
Block a user