]> git.lizzy.rs Git - rust.git/blobdiff - src/libsync/comm/select.rs
auto merge of #15421 : catharsis/rust/doc-ffi-minor-fixes, r=alexcrichton
[rust.git] / src / libsync / comm / select.rs
index 0cb230644df917beaad87b46a55bdeea50c632aa..737a4bfe29916fab400b184b8877d985bc38f7ab 100644 (file)
 //! let (tx1, rx1) = channel();
 //! let (tx2, rx2) = channel();
 //!
-//! tx1.send(1);
-//! tx2.send(2);
+//! tx1.send(1i);
+//! tx2.send(2i);
 //!
 //! select! {
 //!     val = rx1.recv() => {
-//!         assert_eq!(val, 1);
+//!         assert_eq!(val, 1i);
 //!     },
 //!     val = rx2.recv() => {
-//!         assert_eq!(val, 2);
+//!         assert_eq!(val, 2i);
 //!     }
 //! }
 //! ```
 
 #![allow(dead_code)]
+#![experimental = "This implementation, while likely sufficient, is unsafe and \
+                   likely to be error prone. At some point in the future this \
+                   module will likely be replaced, and it is currently \
+                   unknown how much API breakage that will cause. The ability \
+                   to select over a number of channels will remain forever, \
+                   but no guarantees beyond this are being made"]
+
 
 use core::prelude::*;
 
-use alloc::owned::Box;
+use alloc::boxed::Box;
 use core::cell::Cell;
 use core::kinds::marker;
 use core::mem;
@@ -132,7 +139,7 @@ pub fn handle<'a, T: Send>(&'a self, rx: &'a Receiver<T>) -> Handle<'a, T> {
     /// event could either be that data is available or the corresponding
     /// channel has been closed.
     pub fn wait(&self) -> uint {
-        self.wait2(false)
+        self.wait2(true)
     }
 
     /// Helper method for skipping the preflight checks during testing
@@ -397,10 +404,10 @@ macro_rules! select {
         let (tx3, rx3) = channel::<int>();
 
         spawn(proc() {
-            for _ in range(0, 20) { task::deschedule(); }
+            for _ in range(0u, 20) { task::deschedule(); }
             tx1.send(1);
             rx3.recv();
-            for _ in range(0, 20) { task::deschedule(); }
+            for _ in range(0u, 20) { task::deschedule(); }
         });
 
         select! (
@@ -420,7 +427,7 @@ macro_rules! select {
         let (tx3, rx3) = channel::<()>();
 
         spawn(proc() {
-            for _ in range(0, 20) { task::deschedule(); }
+            for _ in range(0u, 20) { task::deschedule(); }
             tx1.send(1);
             tx2.send(2);
             rx3.recv();
@@ -521,7 +528,7 @@ macro_rules! select {
             tx3.send(());
         });
 
-        for _ in range(0, 1000) { task::deschedule(); }
+        for _ in range(0u, 1000) { task::deschedule(); }
         drop(tx1.clone());
         tx2.send(());
         rx3.recv();
@@ -624,7 +631,7 @@ macro_rules! select {
             tx2.send(());
         });
 
-        for _ in range(0, 100) { task::deschedule() }
+        for _ in range(0u, 100) { task::deschedule() }
         tx1.send(());
         rx2.recv();
     })
@@ -643,7 +650,7 @@ macro_rules! select {
             tx2.send(());
         });
 
-        for _ in range(0, 100) { task::deschedule() }
+        for _ in range(0u, 100) { task::deschedule() }
         tx1.send(());
         rx2.recv();
     })
@@ -661,13 +668,13 @@ macro_rules! select {
             tx2.send(());
         });
 
-        for _ in range(0, 100) { task::deschedule() }
+        for _ in range(0u, 100) { task::deschedule() }
         tx1.send(());
         rx2.recv();
     })
 
     test!(fn sync1() {
-        let (tx, rx) = sync_channel(1);
+        let (tx, rx) = sync_channel::<int>(1);
         tx.send(1);
         select! {
             n = rx.recv() => { assert_eq!(n, 1); }
@@ -675,9 +682,9 @@ macro_rules! select {
     })
 
     test!(fn sync2() {
-        let (tx, rx) = sync_channel(0);
+        let (tx, rx) = sync_channel::<int>(0);
         spawn(proc() {
-            for _ in range(0, 100) { task::deschedule() }
+            for _ in range(0u, 100) { task::deschedule() }
             tx.send(1);
         });
         select! {
@@ -686,8 +693,8 @@ macro_rules! select {
     })
 
     test!(fn sync3() {
-        let (tx1, rx1) = sync_channel(0);
-        let (tx2, rx2) = channel();
+        let (tx1, rx1) = sync_channel::<int>(0);
+        let (tx2, rx2): (Sender<int>, Receiver<int>) = channel();
         spawn(proc() { tx1.send(1); });
         spawn(proc() { tx2.send(2); });
         select! {