diff options
| author | Eric Holk <eholk@mozilla.com> | 2011-08-17 17:13:11 -0700 |
|---|---|---|
| committer | Eric Holk <eholk@mozilla.com> | 2011-08-17 17:16:23 -0700 |
| commit | 3ab21e5ee082ff1cc535f23d1be5f153cb80a985 (patch) | |
| tree | 660373019d8287feb0bebfda5001b37c0152886d /src/lib/task.rs | |
| parent | f023f8209040554839dc7bc91d9f796a5ff7f247 (diff) | |
| download | rust-3ab21e5ee082ff1cc535f23d1be5f153cb80a985.tar.gz rust-3ab21e5ee082ff1cc535f23d1be5f153cb80a985.zip | |
Better type inference for chans and ports.
Diffstat (limited to 'src/lib/task.rs')
| -rw-r--r-- | src/lib/task.rs | 21 |
1 files changed, 9 insertions, 12 deletions
diff --git a/src/lib/task.rs b/src/lib/task.rs index 4ad160df603..9ed8e8ecdf0 100644 --- a/src/lib/task.rs +++ b/src/lib/task.rs @@ -1,6 +1,5 @@ import cast = unsafe::reinterpret_cast; import comm; -import comm::_chan; import option::some; import option::none; import option = option::t; @@ -33,7 +32,7 @@ native "rust" mod rustrt { type rust_task = { id : task, mutable notify_enabled : u8, - mutable notify_chan : _chan<task_notification>, + mutable notify_chan : comm::chan_handle<task_notification>, ctx : task_context, stack_ptr : *u8 }; @@ -76,14 +75,12 @@ tag task_notification { fn join(task_port : (task_id, comm::port<task_notification>)) -> task_result { let (id, port) = task_port; - while true { - alt comm::recv::<task_notification>(port) { - exit(_id, res) { - if _id == id { ret res } - } - } + alt comm::recv::<task_notification>(port) { + exit(_id, res) { + if _id == id { ret res } + else { fail #fmt("join received id %d, expected %d", _id, id) } + } } - fail } fn join_id(t : task_id) -> task_result { @@ -108,7 +105,7 @@ fn spawn(thunk : -fn() -> ()) -> task { spawn_inner(thunk, none) } -fn spawn_notify(thunk : -fn() -> (), notify : _chan<task_notification>) +fn spawn_notify(thunk : -fn() -> (), notify : comm::chan<task_notification>) -> task { spawn_inner(thunk, some(notify)) } @@ -121,7 +118,7 @@ fn spawn_joinable(thunk : -fn()) -> (task_id, comm::port<task_notification>) { // FIXME: make this a fn~ once those are supported. fn spawn_inner(thunk : -fn() -> (), - notify : option<_chan<task_notification>>) + notify : option<comm::chan<task_notification>>) -> task_id { let id = rustrt::new_task(); @@ -144,7 +141,7 @@ fn spawn_inner(thunk : -fn() -> (), alt notify { some(c) { (**task_ptr).notify_enabled = 1u8; - (**task_ptr).notify_chan = c; + (**task_ptr).notify_chan = *c; } none {} }; |
