Skip to content

Commit ab3bec9

Browse files
committed
libstd: Remove some cells involved in
`deschedule_running_task_and_then`.
1 parent 7cac9fe commit ab3bec9

File tree

2 files changed

+12
-18
lines changed

2 files changed

+12
-18
lines changed

src/libstd/rt/tube.rs

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,6 @@ impl<T> Clone for Tube<T> {
8888

8989
#[cfg(test)]
9090
mod test {
91-
use cell::Cell;
9291
use rt::test::*;
9392
use rt::rtio::EventLoop;
9493
use rt::sched::Scheduler;
@@ -100,11 +99,10 @@ mod test {
10099
fn simple_test() {
101100
do run_in_newsched_task {
102101
let mut tube: Tube<int> = Tube::new();
103-
let tube_clone = tube.clone();
104-
let tube_clone_cell = Cell::new(tube_clone);
102+
let mut tube_clone = Some(tube.clone());
105103
let sched: ~Scheduler = Local::take();
106104
sched.deschedule_running_task_and_then(|sched, task| {
107-
let mut tube_clone = tube_clone_cell.take();
105+
let mut tube_clone = tube_clone.take_unwrap();
108106
tube_clone.send(1);
109107
sched.enqueue_blocked_task(task);
110108
});
@@ -117,11 +115,10 @@ mod test {
117115
fn blocking_test() {
118116
do run_in_newsched_task {
119117
let mut tube: Tube<int> = Tube::new();
120-
let tube_clone = tube.clone();
121-
let tube_clone = Cell::new(tube_clone);
118+
let mut tube_clone = Some(tube.clone());
122119
let sched: ~Scheduler = Local::take();
123120
sched.deschedule_running_task_and_then(|sched, task| {
124-
let tube_clone = tube_clone.take();
121+
let tube_clone = tube_clone.take_unwrap();
125122
do sched.event_loop.callback {
126123
let mut tube_clone = tube_clone;
127124
// The task should be blocked on this now and
@@ -141,11 +138,10 @@ mod test {
141138

142139
do run_in_newsched_task {
143140
let mut tube: Tube<int> = Tube::new();
144-
let tube_clone = tube.clone();
145-
let tube_clone = Cell::new(tube_clone);
141+
let mut tube_clone = Some(tube.clone());
146142
let sched: ~Scheduler = Local::take();
147143
sched.deschedule_running_task_and_then(|sched, task| {
148-
callback_send(tube_clone.take(), 0);
144+
callback_send(tube_clone.take_unwrap(), 0);
149145

150146
fn callback_send(tube: Tube<int>, i: int) {
151147
if i == 100 {

src/libstd/select.rs

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ pub fn select<A: Select>(ports: &mut [A]) -> uint {
6060
let c = Cell::new(c);
6161

6262
(|| {
63-
let c = Cell::new(c.take());
63+
let mut c = Some(c.take());
6464
let sched: ~Scheduler = Local::take();
6565
sched.deschedule_running_task_and_then(|sched, task| {
6666
let task_handles = task.make_selectable(ports.len());
@@ -74,8 +74,10 @@ pub fn select<A: Select>(ports: &mut [A]) -> uint {
7474
}
7575
}
7676

77-
let c = Cell::new(c.take());
78-
do sched.event_loop.callback { c.take().send_deferred(()) }
77+
let c = c.take_unwrap();
78+
do sched.event_loop.callback {
79+
c.send_deferred(())
80+
}
7981
})
8082
}).finally(|| {
8183
// Unkillable is necessary not because getting killed is dangerous here,
@@ -133,7 +135,6 @@ mod test {
133135
use vec::*;
134136
use comm::GenericChan;
135137
use task;
136-
use cell::Cell;
137138
use iter::{Iterator, range};
138139

139140
#[test] #[should_fail]
@@ -246,9 +247,7 @@ mod test {
246247
let (p3,c3) = oneshot();
247248
let (p4,c4) = oneshot();
248249

249-
let x = Cell::new((c2, p3, c4));
250250
do task::spawn {
251-
let (c2, p3, c4) = x.take();
252251
p3.recv(); // handshake parent
253252
c4.send(()); // normal receive
254253
task::deschedule();
@@ -284,10 +283,9 @@ mod test {
284283
let (p,c) = oneshot();
285284
ports.push(p);
286285
if send_on_chans.contains(&i) {
287-
let c = Cell::new(c);
288286
do spawntask_random {
289287
task::deschedule();
290-
c.take().send(());
288+
c.send(());
291289
}
292290
}
293291
}

0 commit comments

Comments
 (0)