| //@ run-pass |
| #![allow(unused_must_use)] |
| #![allow(unused_mut)] |
| //@ needs-threads |
| |
| use std::sync::mpsc::{channel, Sender}; |
| use std::thread; |
| |
| fn start(tx: &Sender<Sender<String>>) { |
| let (tx2, rx) = channel(); |
| tx.send(tx2).unwrap(); |
| |
| let mut a; |
| let mut b; |
| a = rx.recv().unwrap(); |
| assert_eq!(a, "A".to_string()); |
| println!("{}", a); |
| b = rx.recv().unwrap(); |
| assert_eq!(b, "B".to_string()); |
| println!("{}", b); |
| } |
| |
| pub fn main() { |
| let (tx, rx) = channel(); |
| let child = thread::spawn(move || start(&tx)); |
| |
| let mut c = rx.recv().unwrap(); |
| c.send("A".to_string()).unwrap(); |
| c.send("B".to_string()).unwrap(); |
| thread::yield_now(); |
| |
| child.join(); |
| } |