Convert os/priv/uv to new task_builder interface
This commit is contained in:
parent
c7a6a66e4b
commit
e0e9e451e7
4 changed files with 17 additions and 24 deletions
|
@ -24,6 +24,7 @@ import option::{some, none};
|
||||||
|
|
||||||
import getcwd = rustrt::rust_getcwd;
|
import getcwd = rustrt::rust_getcwd;
|
||||||
import consts::*;
|
import consts::*;
|
||||||
|
import task::task_builder;
|
||||||
|
|
||||||
export close, fclose, fsync_fd, waitpid;
|
export close, fclose, fsync_fd, waitpid;
|
||||||
export env, getenv, setenv, fdopen, pipe;
|
export env, getenv, setenv, fdopen, pipe;
|
||||||
|
@ -160,19 +161,14 @@ mod global_env {
|
||||||
|
|
||||||
fn get_global_env_chan() -> comm::chan<msg> {
|
fn get_global_env_chan() -> comm::chan<msg> {
|
||||||
let global_ptr = rustrt::rust_global_env_chan_ptr();
|
let global_ptr = rustrt::rust_global_env_chan_ptr();
|
||||||
let builder_fn = || {
|
let task_build_fn = || {
|
||||||
let builder = task::builder();
|
|
||||||
task::unsupervise(builder);
|
|
||||||
|
|
||||||
// FIXME (#2621): This would be a good place to use a very small
|
// FIXME (#2621): This would be a good place to use a very small
|
||||||
// foreign stack
|
// foreign stack
|
||||||
task::set_sched_mode(builder, task::single_threaded);
|
task::task().sched_mode(task::single_threaded).unlinked()
|
||||||
|
|
||||||
builder
|
|
||||||
};
|
};
|
||||||
unsafe {
|
unsafe {
|
||||||
priv::chan_from_global_ptr(
|
priv::chan_from_global_ptr(
|
||||||
global_ptr, builder_fn, global_env_task)
|
global_ptr, task_build_fn, global_env_task)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
export chan_from_global_ptr, weaken_task;
|
export chan_from_global_ptr, weaken_task;
|
||||||
|
|
||||||
import compare_and_swap = rustrt::rust_compare_and_swap_ptr;
|
import compare_and_swap = rustrt::rust_compare_and_swap_ptr;
|
||||||
|
import task::task_builder;
|
||||||
|
|
||||||
type rust_port_id = uint;
|
type rust_port_id = uint;
|
||||||
|
|
||||||
|
@ -23,7 +24,7 @@ type global_ptr = *libc::uintptr_t;
|
||||||
*/
|
*/
|
||||||
unsafe fn chan_from_global_ptr<T: send>(
|
unsafe fn chan_from_global_ptr<T: send>(
|
||||||
global: global_ptr,
|
global: global_ptr,
|
||||||
builder: fn() -> task::builder,
|
task_fn: fn() -> task::task_builder,
|
||||||
+f: fn~(comm::port<T>)
|
+f: fn~(comm::port<T>)
|
||||||
) -> comm::chan<T> {
|
) -> comm::chan<T> {
|
||||||
|
|
||||||
|
@ -41,7 +42,7 @@ unsafe fn chan_from_global_ptr<T: send>(
|
||||||
|
|
||||||
let setup_po = comm::port();
|
let setup_po = comm::port();
|
||||||
let setup_ch = comm::chan(setup_po);
|
let setup_ch = comm::chan(setup_po);
|
||||||
let setup_ch = do task::run_listener(builder()) |setup_po| {
|
let setup_ch = do task_fn().spawn_listener |setup_po| {
|
||||||
let po = comm::port::<T>();
|
let po = comm::port::<T>();
|
||||||
let ch = comm::chan(po);
|
let ch = comm::chan(po);
|
||||||
comm::send(setup_ch, ch);
|
comm::send(setup_ch, ch);
|
||||||
|
@ -92,7 +93,7 @@ fn test_from_global_chan1() {
|
||||||
|
|
||||||
// Create the global channel, attached to a new task
|
// Create the global channel, attached to a new task
|
||||||
let ch = unsafe {
|
let ch = unsafe {
|
||||||
do chan_from_global_ptr(globchanp, task::builder) |po| {
|
do chan_from_global_ptr(globchanp, task::task) |po| {
|
||||||
let ch = comm::recv(po);
|
let ch = comm::recv(po);
|
||||||
comm::send(ch, true);
|
comm::send(ch, true);
|
||||||
let ch = comm::recv(po);
|
let ch = comm::recv(po);
|
||||||
|
@ -106,7 +107,7 @@ fn test_from_global_chan1() {
|
||||||
|
|
||||||
// This one just reuses the previous channel
|
// This one just reuses the previous channel
|
||||||
let ch = unsafe {
|
let ch = unsafe {
|
||||||
do chan_from_global_ptr(globchanp, task::builder) |po| {
|
do chan_from_global_ptr(globchanp, task::task) |po| {
|
||||||
let ch = comm::recv(po);
|
let ch = comm::recv(po);
|
||||||
comm::send(ch, false);
|
comm::send(ch, false);
|
||||||
}
|
}
|
||||||
|
@ -135,7 +136,7 @@ fn test_from_global_chan2() {
|
||||||
do task::spawn {
|
do task::spawn {
|
||||||
let ch = unsafe {
|
let ch = unsafe {
|
||||||
do chan_from_global_ptr(
|
do chan_from_global_ptr(
|
||||||
globchanp, task::builder) |po| {
|
globchanp, task::task) |po| {
|
||||||
|
|
||||||
for uint::range(0u, 10u) |_j| {
|
for uint::range(0u, 10u) |_j| {
|
||||||
let ch = comm::recv(po);
|
let ch = comm::recv(po);
|
||||||
|
|
|
@ -8,6 +8,7 @@ import get_gl = get;
|
||||||
import iotask::{iotask, spawn_iotask};
|
import iotask::{iotask, spawn_iotask};
|
||||||
import priv::{chan_from_global_ptr, weaken_task};
|
import priv::{chan_from_global_ptr, weaken_task};
|
||||||
import comm::{port, chan, methods, select2, listen};
|
import comm::{port, chan, methods, select2, listen};
|
||||||
|
import task::task_builder;
|
||||||
import either::{left, right};
|
import either::{left, right};
|
||||||
|
|
||||||
extern mod rustrt {
|
extern mod rustrt {
|
||||||
|
@ -39,10 +40,7 @@ fn get_monitor_task_gl() -> iotask unsafe {
|
||||||
monitor_loop_chan_ptr);
|
monitor_loop_chan_ptr);
|
||||||
|
|
||||||
let builder_fn = || {
|
let builder_fn = || {
|
||||||
let builder = task::builder();
|
task::task().sched_mode(task::single_threaded).unlinked()
|
||||||
task::unsupervise(builder);
|
|
||||||
task::set_sched_mode(builder, task::single_threaded);
|
|
||||||
builder
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#debug("before priv::chan_from_global_ptr");
|
#debug("before priv::chan_from_global_ptr");
|
||||||
|
@ -86,8 +84,7 @@ fn get_monitor_task_gl() -> iotask unsafe {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn spawn_loop() -> iotask unsafe {
|
fn spawn_loop() -> iotask unsafe {
|
||||||
let builder = task::builder();
|
let builder = do task::task().add_wrapper |task_body| {
|
||||||
do task::add_wrapper(builder) |task_body| {
|
|
||||||
fn~(move task_body) {
|
fn~(move task_body) {
|
||||||
// The I/O loop task also needs to be weak so it doesn't keep
|
// The I/O loop task also needs to be weak so it doesn't keep
|
||||||
// the runtime alive
|
// the runtime alive
|
||||||
|
@ -102,7 +99,7 @@ fn spawn_loop() -> iotask unsafe {
|
||||||
#debug("global libuv task is leaving weakened state");
|
#debug("global libuv task is leaving weakened state");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
spawn_iotask(builder)
|
spawn_iotask(builder)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,7 @@ export exit;
|
||||||
import libc::c_void;
|
import libc::c_void;
|
||||||
import ptr::addr_of;
|
import ptr::addr_of;
|
||||||
import comm::{port, chan, methods, listen};
|
import comm::{port, chan, methods, listen};
|
||||||
|
import task::task_builder;
|
||||||
import ll = uv_ll;
|
import ll = uv_ll;
|
||||||
|
|
||||||
/// Used to abstract-away direct interaction with a libuv loop.
|
/// Used to abstract-away direct interaction with a libuv loop.
|
||||||
|
@ -23,13 +24,11 @@ enum iotask {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fn spawn_iotask(-builder: task::builder) -> iotask {
|
fn spawn_iotask(-task: task::task_builder) -> iotask {
|
||||||
|
|
||||||
task::set_sched_mode(builder, task::single_threaded);
|
|
||||||
|
|
||||||
do listen |iotask_ch| {
|
do listen |iotask_ch| {
|
||||||
|
|
||||||
do task::run(copy(builder)) {
|
do task.sched_mode(task::single_threaded).spawn {
|
||||||
#debug("entering libuv task");
|
#debug("entering libuv task");
|
||||||
run_loop(iotask_ch);
|
run_loop(iotask_ch);
|
||||||
#debug("libuv task exiting");
|
#debug("libuv task exiting");
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue