rollup merge of #20273: alexcrichton/second-pass-comm
Conflicts: src/doc/guide.md src/libcollections/bit.rs src/libcollections/btree/node.rs src/libcollections/slice.rs src/libcore/ops.rs src/libcore/prelude.rs src/librand/rand_impls.rs src/librustc/middle/check_match.rs src/librustc/middle/infer/region_inference/mod.rs src/librustc_driver/lib.rs src/librustdoc/test.rs src/libstd/bitflags.rs src/libstd/io/comm_adapters.rs src/libstd/io/mem.rs src/libstd/io/mod.rs src/libstd/io/net/pipe.rs src/libstd/io/net/tcp.rs src/libstd/io/net/udp.rs src/libstd/io/pipe.rs src/libstd/io/process.rs src/libstd/io/stdio.rs src/libstd/io/timer.rs src/libstd/io/util.rs src/libstd/macros.rs src/libstd/os.rs src/libstd/path/posix.rs src/libstd/path/windows.rs src/libstd/prelude/v1.rs src/libstd/rand/mod.rs src/libstd/rand/os.rs src/libstd/sync/barrier.rs src/libstd/sync/condvar.rs src/libstd/sync/future.rs src/libstd/sync/mpsc/mod.rs src/libstd/sync/mpsc/mpsc_queue.rs src/libstd/sync/mpsc/select.rs src/libstd/sync/mpsc/spsc_queue.rs src/libstd/sync/mutex.rs src/libstd/sync/once.rs src/libstd/sync/rwlock.rs src/libstd/sync/semaphore.rs src/libstd/sync/task_pool.rs src/libstd/sys/common/helper_thread.rs src/libstd/sys/unix/process.rs src/libstd/sys/unix/timer.rs src/libstd/sys/windows/c.rs src/libstd/sys/windows/timer.rs src/libstd/sys/windows/tty.rs src/libstd/thread.rs src/libstd/thread_local/mod.rs src/libstd/thread_local/scoped.rs src/libtest/lib.rs src/test/auxiliary/cci_capture_clause.rs src/test/bench/shootout-reverse-complement.rs src/test/bench/shootout-spectralnorm.rs src/test/compile-fail/array-old-syntax-2.rs src/test/compile-fail/bind-by-move-no-guards.rs src/test/compile-fail/builtin-superkinds-self-type.rs src/test/compile-fail/comm-not-freeze-receiver.rs src/test/compile-fail/comm-not-freeze.rs src/test/compile-fail/issue-12041.rs src/test/compile-fail/unsendable-class.rs src/test/run-pass/builtin-superkinds-capabilities-transitive.rs src/test/run-pass/builtin-superkinds-capabilities-xc.rs src/test/run-pass/builtin-superkinds-capabilities.rs src/test/run-pass/builtin-superkinds-self-type.rs src/test/run-pass/capturing-logging.rs src/test/run-pass/closure-bounds-can-capture-chan.rs src/test/run-pass/comm.rs src/test/run-pass/core-run-destroy.rs src/test/run-pass/drop-trait-enum.rs src/test/run-pass/hashmap-memory.rs src/test/run-pass/issue-13494.rs src/test/run-pass/issue-3609.rs src/test/run-pass/issue-4446.rs src/test/run-pass/issue-4448.rs src/test/run-pass/issue-8827.rs src/test/run-pass/issue-9396.rs src/test/run-pass/ivec-tag.rs src/test/run-pass/rust-log-filter.rs src/test/run-pass/send-resource.rs src/test/run-pass/send-type-inference.rs src/test/run-pass/sendable-class.rs src/test/run-pass/spawn-types.rs src/test/run-pass/task-comm-0.rs src/test/run-pass/task-comm-10.rs src/test/run-pass/task-comm-11.rs src/test/run-pass/task-comm-13.rs src/test/run-pass/task-comm-14.rs src/test/run-pass/task-comm-15.rs src/test/run-pass/task-comm-16.rs src/test/run-pass/task-comm-3.rs src/test/run-pass/task-comm-4.rs src/test/run-pass/task-comm-5.rs src/test/run-pass/task-comm-6.rs src/test/run-pass/task-comm-7.rs src/test/run-pass/task-comm-9.rs src/test/run-pass/task-comm-chan-nil.rs src/test/run-pass/task-spawn-move-and-copy.rs src/test/run-pass/task-stderr.rs src/test/run-pass/tcp-accept-stress.rs src/test/run-pass/tcp-connect-timeouts.rs src/test/run-pass/tempfile.rs src/test/run-pass/trait-bounds-in-arc.rs src/test/run-pass/trivial-message.rs src/test/run-pass/unique-send-2.rs src/test/run-pass/unique-send.rs src/test/run-pass/unwind-resource.rs
This commit is contained in:
@@ -484,14 +484,15 @@ impl sys_common::AsInner<TcpAcceptorImp> for TcpAcceptor {
|
||||
mod test {
|
||||
use prelude::v1::*;
|
||||
|
||||
use comm::channel;
|
||||
use sync::mpsc::channel;
|
||||
use thread::Thread;
|
||||
use io::net::tcp::*;
|
||||
use io::net::ip::*;
|
||||
use io::{EndOfFile, TimedOut, IoError, ShortWrite, OtherIoError, ConnectionAborted};
|
||||
use io::{ConnectionRefused, ConnectionReset, BrokenPipe, NotConnected};
|
||||
use io::{PermissionDenied, Listener, Acceptor};
|
||||
use io::test::*;
|
||||
use io::{EndOfFile, TimedOut, ShortWrite, IoError};
|
||||
use io::{ConnectionRefused, BrokenPipe, ConnectionAborted};
|
||||
use io::{ConnectionReset, NotConnected, PermissionDenied, OtherIoError};
|
||||
use io::{Acceptor, Listener};
|
||||
|
||||
// FIXME #11530 this fails on android because tests are run as root
|
||||
#[cfg_attr(any(windows, target_os = "android"), ignore)]
|
||||
@@ -696,11 +697,11 @@ mod test {
|
||||
let (tx, rx) = channel();
|
||||
let _t = Thread::spawn(move|| {
|
||||
drop(TcpStream::connect(addr));
|
||||
tx.send(());
|
||||
tx.send(()).unwrap();
|
||||
});
|
||||
|
||||
let mut stream = acceptor.accept();
|
||||
rx.recv();
|
||||
rx.recv().unwrap();
|
||||
let buf = [0];
|
||||
match stream.write(&buf) {
|
||||
Ok(..) => {}
|
||||
@@ -721,11 +722,11 @@ mod test {
|
||||
let (tx, rx) = channel();
|
||||
let _t = Thread::spawn(move|| {
|
||||
drop(TcpStream::connect(addr));
|
||||
tx.send(());
|
||||
tx.send(()).unwrap();
|
||||
});
|
||||
|
||||
let mut stream = acceptor.accept();
|
||||
rx.recv();
|
||||
rx.recv().unwrap();
|
||||
let buf = [0];
|
||||
match stream.write(&buf) {
|
||||
Ok(..) => {}
|
||||
@@ -971,20 +972,20 @@ mod test {
|
||||
let (tx, rx) = channel();
|
||||
let _t = Thread::spawn(move|| {
|
||||
let mut srv = TcpListener::bind(addr).listen().unwrap();
|
||||
tx.send(());
|
||||
tx.send(()).unwrap();
|
||||
let mut cl = srv.accept().unwrap();
|
||||
cl.write(&[10]).unwrap();
|
||||
let mut b = [0];
|
||||
cl.read(&mut b).unwrap();
|
||||
tx.send(());
|
||||
tx.send(()).unwrap();
|
||||
});
|
||||
|
||||
rx.recv();
|
||||
rx.recv().unwrap();
|
||||
let mut c = TcpStream::connect(addr).unwrap();
|
||||
let mut b = [0; 10];
|
||||
assert_eq!(c.read(&mut b), Ok(1));
|
||||
c.write(&[1]).unwrap();
|
||||
rx.recv();
|
||||
rx.recv().unwrap();
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -1007,19 +1008,19 @@ mod test {
|
||||
let (tx, rx) = channel();
|
||||
|
||||
let _t = Thread::spawn(move|| {
|
||||
rx.recv();
|
||||
rx.recv().unwrap();
|
||||
let _stream = TcpStream::connect(addr).unwrap();
|
||||
// Close
|
||||
rx.recv();
|
||||
rx.recv().unwrap();
|
||||
});
|
||||
|
||||
{
|
||||
let mut acceptor = TcpListener::bind(addr).listen();
|
||||
tx.send(());
|
||||
tx.send(()).unwrap();
|
||||
{
|
||||
let _stream = acceptor.accept().unwrap();
|
||||
// Close client
|
||||
tx.send(());
|
||||
tx.send(()).unwrap();
|
||||
}
|
||||
// Close listener
|
||||
}
|
||||
@@ -1046,14 +1047,14 @@ mod test {
|
||||
let (tx2, rx2) = channel();
|
||||
let _t = Thread::spawn(move|| {
|
||||
let mut s2 = s2;
|
||||
rx1.recv();
|
||||
rx1.recv().unwrap();
|
||||
s2.write(&[1]).unwrap();
|
||||
tx2.send(());
|
||||
tx2.send(()).unwrap();
|
||||
});
|
||||
tx1.send(());
|
||||
tx1.send(()).unwrap();
|
||||
let mut buf = [0, 0];
|
||||
assert_eq!(s1.read(&mut buf), Ok(1));
|
||||
rx2.recv();
|
||||
rx2.recv().unwrap();
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -1066,9 +1067,9 @@ mod test {
|
||||
let _t = Thread::spawn(move|| {
|
||||
let mut s = TcpStream::connect(addr);
|
||||
s.write(&[1]).unwrap();
|
||||
rx.recv();
|
||||
rx.recv().unwrap();
|
||||
s.write(&[2]).unwrap();
|
||||
rx.recv();
|
||||
rx.recv().unwrap();
|
||||
});
|
||||
|
||||
let mut s1 = acceptor.accept().unwrap();
|
||||
@@ -1079,14 +1080,14 @@ mod test {
|
||||
let mut s2 = s2;
|
||||
let mut buf = [0, 0];
|
||||
s2.read(&mut buf).unwrap();
|
||||
tx2.send(());
|
||||
done.send(());
|
||||
tx2.send(()).unwrap();
|
||||
done.send(()).unwrap();
|
||||
});
|
||||
let mut buf = [0, 0];
|
||||
s1.read(&mut buf).unwrap();
|
||||
tx1.send(());
|
||||
tx1.send(()).unwrap();
|
||||
|
||||
rx.recv();
|
||||
rx.recv().unwrap();
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -1108,11 +1109,11 @@ mod test {
|
||||
let _t = Thread::spawn(move|| {
|
||||
let mut s2 = s2;
|
||||
s2.write(&[1]).unwrap();
|
||||
done.send(());
|
||||
done.send(()).unwrap();
|
||||
});
|
||||
s1.write(&[2]).unwrap();
|
||||
|
||||
rx.recv();
|
||||
rx.recv().unwrap();
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -1154,9 +1155,9 @@ mod test {
|
||||
if !cfg!(target_os = "freebsd") {
|
||||
let (tx, rx) = channel();
|
||||
let _t = Thread::spawn(move|| {
|
||||
tx.send(TcpStream::connect(addr).unwrap());
|
||||
tx.send(TcpStream::connect(addr).unwrap()).unwrap();
|
||||
});
|
||||
let _l = rx.recv();
|
||||
let _l = rx.recv().unwrap();
|
||||
for i in range(0i, 1001) {
|
||||
match a.accept() {
|
||||
Ok(..) => break,
|
||||
@@ -1184,7 +1185,7 @@ mod test {
|
||||
Thread::spawn(move|| {
|
||||
let mut a = a;
|
||||
let _s = a.accept().unwrap();
|
||||
let _ = rx.recv_opt();
|
||||
let _ = rx.recv().unwrap();
|
||||
}).detach();
|
||||
|
||||
let mut b = [0];
|
||||
@@ -1221,7 +1222,7 @@ mod test {
|
||||
Thread::spawn(move|| {
|
||||
let mut a = a;
|
||||
let _s = a.accept().unwrap();
|
||||
let _ = rx.recv_opt();
|
||||
let _ = rx.recv().unwrap();
|
||||
}).detach();
|
||||
|
||||
let mut s = TcpStream::connect(addr).unwrap();
|
||||
@@ -1230,13 +1231,13 @@ mod test {
|
||||
let _t = Thread::spawn(move|| {
|
||||
let mut s2 = s2;
|
||||
assert!(s2.read(&mut [0]).is_err());
|
||||
tx.send(());
|
||||
tx.send(()).unwrap();
|
||||
});
|
||||
// this should wake up the child task
|
||||
s.close_read().unwrap();
|
||||
|
||||
// this test will never finish if the child doesn't wake up
|
||||
rx.recv();
|
||||
rx.recv().unwrap();
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -1246,9 +1247,9 @@ mod test {
|
||||
let (tx, rx) = channel::<()>();
|
||||
Thread::spawn(move|| {
|
||||
let mut s = TcpStream::connect(addr).unwrap();
|
||||
rx.recv();
|
||||
rx.recv().unwrap();
|
||||
assert!(s.write(&[0]).is_ok());
|
||||
let _ = rx.recv_opt();
|
||||
let _ = rx.recv();
|
||||
}).detach();
|
||||
|
||||
let mut s = a.accept().unwrap();
|
||||
@@ -1267,7 +1268,7 @@ mod test {
|
||||
}
|
||||
assert_eq!(s.write(&[0]).err().unwrap().kind, TimedOut);
|
||||
|
||||
tx.send(());
|
||||
tx.send(()).unwrap();
|
||||
s.set_timeout(None);
|
||||
assert_eq!(s.read(&mut [0, 0]), Ok(1));
|
||||
}
|
||||
@@ -1279,7 +1280,7 @@ mod test {
|
||||
let (tx, rx) = channel::<()>();
|
||||
Thread::spawn(move|| {
|
||||
let mut s = TcpStream::connect(addr).unwrap();
|
||||
rx.recv();
|
||||
rx.recv().unwrap();
|
||||
let mut amt = 0;
|
||||
while amt < 100 * 128 * 1024 {
|
||||
match s.read(&mut [0;128 * 1024]) {
|
||||
@@ -1287,7 +1288,7 @@ mod test {
|
||||
Err(e) => panic!("{}", e),
|
||||
}
|
||||
}
|
||||
let _ = rx.recv_opt();
|
||||
let _ = rx.recv();
|
||||
}).detach();
|
||||
|
||||
let mut s = a.accept().unwrap();
|
||||
@@ -1295,7 +1296,7 @@ mod test {
|
||||
assert_eq!(s.read(&mut [0]).err().unwrap().kind, TimedOut);
|
||||
assert_eq!(s.read(&mut [0]).err().unwrap().kind, TimedOut);
|
||||
|
||||
tx.send(());
|
||||
tx.send(()).unwrap();
|
||||
for _ in range(0i, 100) {
|
||||
assert!(s.write(&[0;128 * 1024]).is_ok());
|
||||
}
|
||||
@@ -1308,9 +1309,9 @@ mod test {
|
||||
let (tx, rx) = channel::<()>();
|
||||
Thread::spawn(move|| {
|
||||
let mut s = TcpStream::connect(addr).unwrap();
|
||||
rx.recv();
|
||||
rx.recv().unwrap();
|
||||
assert!(s.write(&[0]).is_ok());
|
||||
let _ = rx.recv_opt();
|
||||
let _ = rx.recv();
|
||||
}).detach();
|
||||
|
||||
let mut s = a.accept().unwrap();
|
||||
@@ -1325,7 +1326,7 @@ mod test {
|
||||
}
|
||||
assert_eq!(s.write(&[0]).err().unwrap().kind, TimedOut);
|
||||
|
||||
tx.send(());
|
||||
tx.send(()).unwrap();
|
||||
assert!(s.read(&mut [0]).is_ok());
|
||||
}
|
||||
|
||||
@@ -1336,9 +1337,9 @@ mod test {
|
||||
let (tx, rx) = channel::<()>();
|
||||
Thread::spawn(move|| {
|
||||
let mut s = TcpStream::connect(addr).unwrap();
|
||||
rx.recv();
|
||||
rx.recv().unwrap();
|
||||
assert_eq!(s.write(&[0]), Ok(()));
|
||||
let _ = rx.recv_opt();
|
||||
let _ = rx.recv();
|
||||
}).detach();
|
||||
|
||||
let mut s = a.accept().unwrap();
|
||||
@@ -1347,14 +1348,14 @@ mod test {
|
||||
let _t = Thread::spawn(move|| {
|
||||
let mut s2 = s2;
|
||||
assert_eq!(s2.read(&mut [0]), Ok(1));
|
||||
tx2.send(());
|
||||
tx2.send(()).unwrap();
|
||||
});
|
||||
|
||||
s.set_read_timeout(Some(20));
|
||||
assert_eq!(s.read(&mut [0]).err().unwrap().kind, TimedOut);
|
||||
tx.send(());
|
||||
tx.send(()).unwrap();
|
||||
|
||||
rx2.recv();
|
||||
rx2.recv().unwrap();
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -1369,9 +1370,9 @@ mod test {
|
||||
let txdone2 = txdone.clone();
|
||||
let _t = Thread::spawn(move|| {
|
||||
let mut tcp = TcpStream::connect(addr).unwrap();
|
||||
rx.recv();
|
||||
rx.recv().unwrap();
|
||||
tcp.write_u8(0).unwrap();
|
||||
txdone2.send(());
|
||||
txdone2.send(()).unwrap();
|
||||
});
|
||||
|
||||
// Spawn off a reading clone
|
||||
@@ -1381,7 +1382,7 @@ mod test {
|
||||
let _t = Thread::spawn(move|| {
|
||||
let mut tcp2 = tcp2;
|
||||
tcp2.read_u8().unwrap();
|
||||
txdone3.send(());
|
||||
txdone3.send(()).unwrap();
|
||||
});
|
||||
|
||||
// Try to ensure that the reading clone is indeed reading
|
||||
@@ -1392,9 +1393,9 @@ mod test {
|
||||
// clone the handle again while it's reading, then let it finish the
|
||||
// read.
|
||||
let _ = tcp.clone();
|
||||
tx.send(());
|
||||
rxdone.recv();
|
||||
rxdone.recv();
|
||||
tx.send(()).unwrap();
|
||||
rxdone.recv().unwrap();
|
||||
rxdone.recv().unwrap();
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -1425,8 +1426,14 @@ mod test {
|
||||
let (tx, rx) = channel();
|
||||
let tx2 = tx.clone();
|
||||
|
||||
let _t = Thread::spawn(move|| { let mut a = a; tx.send(a.accept()) });
|
||||
let _t = Thread::spawn(move|| { let mut a = a2; tx2.send(a.accept()) });
|
||||
let _t = Thread::spawn(move|| {
|
||||
let mut a = a;
|
||||
tx.send(a.accept()).unwrap();
|
||||
});
|
||||
let _t = Thread::spawn(move|| {
|
||||
let mut a = a2;
|
||||
tx2.send(a.accept()).unwrap();
|
||||
});
|
||||
|
||||
let _t = Thread::spawn(move|| {
|
||||
let _ = TcpStream::connect(addr);
|
||||
@@ -1435,8 +1442,8 @@ mod test {
|
||||
let _ = TcpStream::connect(addr);
|
||||
});
|
||||
|
||||
assert!(rx.recv().is_ok());
|
||||
assert!(rx.recv().is_ok());
|
||||
assert!(rx.recv().unwrap().is_ok());
|
||||
assert!(rx.recv().unwrap().is_ok());
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -1459,10 +1466,10 @@ mod test {
|
||||
let (tx, rx) = channel();
|
||||
let _t = Thread::spawn(move|| {
|
||||
let mut a = a;
|
||||
tx.send(a.accept());
|
||||
tx.send(a.accept()).unwrap();
|
||||
});
|
||||
a2.close_accept().unwrap();
|
||||
|
||||
assert_eq!(rx.recv().err().unwrap().kind, EndOfFile);
|
||||
assert_eq!(rx.recv().unwrap().err().unwrap().kind, EndOfFile);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user