Skip to content

Commit d0fb853

Browse files
committed
Add task::spawn_unlinked and start migrating away from task::unsupervise
1 parent 6e21b5f commit d0fb853

13 files changed

+39
-60
lines changed

src/libcore/comm.rs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -474,9 +474,7 @@ fn test_listen() {
474474
#[ignore(cfg(windows))]
475475
fn test_port_detach_fail() {
476476
for iter::repeat(100u) {
477-
let builder = task::builder();
478-
task::unsupervise(builder);
479-
do task::run(builder) {
477+
do task::spawn_unlinked {
480478
let po = port();
481479
let ch = po.chan();
482480

src/libcore/priv.rs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -210,9 +210,7 @@ fn test_weaken_task_then_unweaken() {
210210

211211
#[test]
212212
fn test_weaken_task_wait() {
213-
let builder = task::builder();
214-
task::unsupervise(builder);
215-
do task::run(builder) {
213+
do task::spawn_unlinked {
216214
unsafe {
217215
do weaken_task |po| {
218216
comm::recv(po);
@@ -231,9 +229,7 @@ fn test_weaken_task_stress() {
231229
}
232230
}
233231
}
234-
let builder = task::builder();
235-
task::unsupervise(builder);
236-
do task::run(builder) {
232+
do task::spawn_unlinked {
237233
unsafe {
238234
do weaken_task |po| {
239235
// Wait for it to tell us to die

src/libcore/task.rs

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ export run_listener;
5151
export run_with;
5252

5353
export spawn;
54+
export spawn_unlinked;
5455
export spawn_with;
5556
export spawn_listener;
5657
export spawn_sched;
@@ -430,6 +431,17 @@ fn spawn(+f: fn~()) {
430431
run(builder(), f);
431432
}
432433

434+
fn spawn_unlinked(+f: fn~()) {
435+
/*!
436+
* Creates a child task unlinked from the current one. If either this
437+
* task or the child task fails, the other will not be killed.
438+
*/
439+
440+
let b = builder();
441+
unsupervise(b);
442+
run(b, f);
443+
}
444+
433445
fn spawn_with<A:send>(+arg: A, +f: fn~(+A)) {
434446
/*!
435447
* Runs a task, while transfering ownership of one argument to the
@@ -1159,12 +1171,8 @@ fn test_spawn_raw_unsupervise() {
11591171
fn test_spawn_unlinked_unsup_no_fail_down() { // grandchild sends on a port
11601172
let po = comm::port();
11611173
let ch = comm::chan(po);
1162-
let builder = task::builder();
1163-
task::unsupervise(builder);
1164-
do task::run(builder) {
1165-
let builder = task::builder();
1166-
task::unsupervise(builder);
1167-
do task::run(builder) {
1174+
do task::spawn_unlinked {
1175+
do task::spawn_unlinked {
11681176
// Give middle task a chance to fail-but-not-kill-us.
11691177
for iter::repeat(8192) { task::yield(); }
11701178
comm::send(ch, ()); // If killed first, grandparent hangs.
@@ -1175,9 +1183,7 @@ fn test_spawn_unlinked_unsup_no_fail_down() { // grandchild sends on a port
11751183
}
11761184
#[test] #[ignore(cfg(windows))]
11771185
fn test_spawn_unlinked_unsup_no_fail_up() { // child unlinked fails
1178-
let builder = task::builder();
1179-
task::unsupervise(builder);
1180-
do task::run(builder) { fail; }
1186+
do task::spawn_unlinked { fail; }
11811187
}
11821188
#[test] #[ignore(cfg(windows))]
11831189
fn test_spawn_unlinked_sup_no_fail_up() { // child unlinked fails

src/test/run-pass/lots-a-fail.rs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,6 @@ fn iloop() {
1414

1515
fn main() {
1616
for uint::range(0u, 100u) |_i| {
17-
let builder = task::builder();
18-
task::unsupervise(builder);
19-
task::run(builder, || iloop() );
17+
task::spawn_unlinked(|| iloop() );
2018
}
21-
}
19+
}

src/test/run-pass/pipe-detect-term.rs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,7 @@ fn main() {
2727

2828
sleep(iotask, 100);
2929

30-
let b = task::builder();
31-
task::unsupervise(b);
32-
task::run(b, failtest);
30+
task::spawn_unlinked(failtest);
3331
}
3432

3533
// Make sure the right thing happens during failure.

src/test/run-pass/send-iloop.rs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,6 @@ fn iloop() {
2222

2323
fn main() {
2424
for uint::range(0u, 16u) |_i| {
25-
let builder = task::builder();
26-
task::unsupervise(builder);
27-
task::run(builder, || iloop() );
25+
task::spawn_unlinked(|| iloop() );
2826
}
29-
}
27+
}

src/test/run-pass/task-killjoin-rsrc.rs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ fn joinable(f: fn~()) -> comm::port<bool> {
3333
}
3434
let p = comm::port();
3535
let c = comm::chan(p);
36-
let _ = task::spawn {|| wrapper((c, f)) };
36+
let _ = task::spawn_unlinked {|| wrapper((c, f)) };
3737
p
3838
}
3939

@@ -50,17 +50,14 @@ fn supervised() {
5050
fail;
5151
}
5252

53-
fn supervisor(b: task::builder) {
54-
// Unsupervise this task so the process doesn't return a failure status as
55-
// a result of the main task being killed.
56-
task::unsupervise(b);
53+
fn supervisor() {
5754
#error["supervisor task=%?", task::get_task()];
5855
let t = joinable(supervised);
5956
join(t);
6057
}
6158

6259
fn main() {
63-
join(joinable({|| supervisor(task::builder())}));
60+
join(joinable({|| supervisor()}));
6461
}
6562

6663
// Local Variables:

src/test/run-pass/task-killjoin.rs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,11 @@ fn supervisor() {
2020
// Unsupervise this task so the process doesn't return a failure status as
2121
// a result of the main task being killed.
2222
let f = supervised;
23-
task::try(|| supervised() );
23+
task::try(supervised);
2424
}
2525

2626
fn main() {
27-
let builder = task::builder();
28-
task::unsupervise(builder);
29-
task::run(builder, || supervisor() )
27+
task::spawn_unlinked(supervisor)
3028
}
3129

3230
// Local Variables:
Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
11
// xfail-win32
22
// error-pattern:ran out of stack
33

4-
// Test that the task fails after hiting the recursion limit, but
4+
// Test that the task fails after hitting the recursion limit, but
55
// that it doesn't bring down the whole proc
66

77
fn main() {
8-
let builder = task::builder();
9-
task::unsupervise(builder);
10-
do task::run(builder) {
8+
do task::spawn_unlinked {
119
fn f() { f() };
1210
f();
1311
};
14-
}
12+
}

src/test/run-pass/unwind-box.rs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,5 @@ fn f() {
88
}
99

1010
fn main() {
11-
let builder = task::builder();
12-
task::unsupervise(builder);
13-
task::run(builder, || f() );
14-
}
11+
task::spawn_unlinked(f);
12+
}

src/test/run-pass/unwind-resource.rs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,7 @@ fn f(c: comm::chan<bool>) {
2121
fn main() {
2222
let p = comm::port();
2323
let c = comm::chan(p);
24-
let builder = task::builder();
25-
task::unsupervise(builder);
26-
task::run(builder, || f(c) );
24+
task::spawn_unlinked(|| f(c) );
2725
#error("hiiiiiiiii");
2826
assert comm::recv(p);
29-
}
27+
}

src/test/run-pass/unwind-resource2.rs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,5 @@ fn f() {
1515
}
1616

1717
fn main() {
18-
let builder = task::builder();
19-
task::unsupervise(builder);
20-
task::run(builder, || f() );
21-
}
18+
task::spawn_unlinked(f);
19+
}

src/test/run-pass/unwind-unique.rs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,5 @@ fn f() {
88
}
99

1010
fn main() {
11-
let builder = task::builder();
12-
task::unsupervise(builder);
13-
task::run(builder, || f() );
14-
}
11+
task::spawn_unlinked(f);
12+
}

0 commit comments

Comments
 (0)