about summary refs log tree commit diff
path: root/src/libstd/select.rs
diff options
context:
space:
mode:
authorPatrick Walton <pcwalton@mimiga.net>2013-12-04 14:43:02 -0800
committerPatrick Walton <pcwalton@mimiga.net>2013-12-10 15:13:12 -0800
commitab3bec91d77150e434ac1480fbb3935213e33dca (patch)
treef0060ee28e481bd72a2c767a55efdebe63db3748 /src/libstd/select.rs
parent7cac9fe76349120ea2373f3ce47a561271b5e8b6 (diff)
downloadrust-ab3bec91d77150e434ac1480fbb3935213e33dca.tar.gz
rust-ab3bec91d77150e434ac1480fbb3935213e33dca.zip
libstd: Remove some cells involved in
`deschedule_running_task_and_then`.
Diffstat (limited to 'src/libstd/select.rs')
-rw-r--r--src/libstd/select.rs14
1 files changed, 6 insertions, 8 deletions
diff --git a/src/libstd/select.rs b/src/libstd/select.rs
index 43f1c3c5296..4f78ade3f08 100644
--- a/src/libstd/select.rs
+++ b/src/libstd/select.rs
@@ -60,7 +60,7 @@ pub fn select<A: Select>(ports: &mut [A]) -> uint {
     let c = Cell::new(c);
 
     (|| {
-        let c = Cell::new(c.take());
+        let mut c = Some(c.take());
         let sched: ~Scheduler = Local::take();
         sched.deschedule_running_task_and_then(|sched, task| {
             let task_handles = task.make_selectable(ports.len());
@@ -74,8 +74,10 @@ pub fn select<A: Select>(ports: &mut [A]) -> uint {
                 }
             }
 
-            let c = Cell::new(c.take());
-            do sched.event_loop.callback { c.take().send_deferred(()) }
+            let c = c.take_unwrap();
+            do sched.event_loop.callback {
+                c.send_deferred(())
+            }
         })
     }).finally(|| {
         // Unkillable is necessary not because getting killed is dangerous here,
@@ -133,7 +135,6 @@ mod test {
     use vec::*;
     use comm::GenericChan;
     use task;
-    use cell::Cell;
     use iter::{Iterator, range};
 
     #[test] #[should_fail]
@@ -246,9 +247,7 @@ mod test {
             let (p3,c3) = oneshot();
             let (p4,c4) = oneshot();
 
-            let x = Cell::new((c2, p3, c4));
             do task::spawn {
-                let (c2, p3, c4) = x.take();
                 p3.recv();   // handshake parent
                 c4.send(()); // normal receive
                 task::deschedule();
@@ -284,10 +283,9 @@ mod test {
                             let (p,c) = oneshot();
                             ports.push(p);
                             if send_on_chans.contains(&i) {
-                                let c = Cell::new(c);
                                 do spawntask_random {
                                     task::deschedule();
-                                    c.take().send(());
+                                    c.send(());
                                 }
                             }
                         }