libcore: add a task::set_sched_mode fn
This commit is contained in:
@@ -163,15 +163,11 @@ mod global_env {
|
|||||||
let builder_fn = || {
|
let builder_fn = || {
|
||||||
let builder = task::builder();
|
let builder = task::builder();
|
||||||
task::unsupervise(builder);
|
task::unsupervise(builder);
|
||||||
task::set_opts(builder, {
|
|
||||||
sched: some({
|
// FIXME (#2621): This would be a good place to use a very small
|
||||||
mode: task::single_threaded,
|
// foreign stack
|
||||||
// FIXME (#2621): This would be a good place to use a
|
task::set_sched_mode(builder, task::single_threaded);
|
||||||
// very small foreign stack
|
|
||||||
foreign_stack_size: none
|
|
||||||
})
|
|
||||||
with task::get_opts(builder)
|
|
||||||
});
|
|
||||||
builder
|
builder
|
||||||
};
|
};
|
||||||
unsafe {
|
unsafe {
|
||||||
|
|||||||
@@ -38,6 +38,7 @@ export builder;
|
|||||||
export default_task_opts;
|
export default_task_opts;
|
||||||
export get_opts;
|
export get_opts;
|
||||||
export set_opts;
|
export set_opts;
|
||||||
|
export set_sched_mode;
|
||||||
export add_wrapper;
|
export add_wrapper;
|
||||||
export run;
|
export run;
|
||||||
|
|
||||||
@@ -237,6 +238,16 @@ fn set_opts(builder: builder, opts: task_opts) {
|
|||||||
builder.opts = opts;
|
builder.opts = opts;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn set_sched_mode(builder: builder, mode: sched_mode) {
|
||||||
|
set_opts(builder, {
|
||||||
|
sched: some({
|
||||||
|
mode: mode,
|
||||||
|
foreign_stack_size: none
|
||||||
|
})
|
||||||
|
with get_opts(builder)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
fn add_wrapper(builder: builder, gen_body: fn@(+fn~()) -> fn~()) {
|
fn add_wrapper(builder: builder, gen_body: fn@(+fn~()) -> fn~()) {
|
||||||
/*!
|
/*!
|
||||||
* Add a wrapper to the body of the spawned task.
|
* Add a wrapper to the body of the spawned task.
|
||||||
@@ -467,13 +478,7 @@ fn spawn_sched(mode: sched_mode, +f: fn~()) {
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
let mut builder = builder();
|
let mut builder = builder();
|
||||||
set_opts(builder, {
|
set_sched_mode(builder, mode);
|
||||||
sched: some({
|
|
||||||
mode: mode,
|
|
||||||
foreign_stack_size: none
|
|
||||||
})
|
|
||||||
with get_opts(builder)
|
|
||||||
});
|
|
||||||
run(builder, f);
|
run(builder, f);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1207,14 +1212,7 @@ fn test_avoid_copying_the_body_unsupervise() {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_osmain() {
|
fn test_osmain() {
|
||||||
let buildr = builder();
|
let buildr = builder();
|
||||||
let opts = {
|
set_sched_mode(buildr, mode);
|
||||||
sched: some({
|
|
||||||
mode: osmain,
|
|
||||||
foreign_stack_size: none
|
|
||||||
})
|
|
||||||
with get_opts(buildr)
|
|
||||||
};
|
|
||||||
set_opts(buildr, opts);
|
|
||||||
|
|
||||||
let po = comm::port();
|
let po = comm::port();
|
||||||
let ch = comm::chan(po);
|
let ch = comm::chan(po);
|
||||||
|
|||||||
@@ -40,14 +40,7 @@ fn get_monitor_task_gl() -> iotask unsafe {
|
|||||||
|
|
||||||
let builder_fn = || {
|
let builder_fn = || {
|
||||||
let builder = task::builder();
|
let builder = task::builder();
|
||||||
task::set_opts(builder, {
|
task::set_sched_mode(builder, task::single_threaded);
|
||||||
supervise: false,
|
|
||||||
sched: some({
|
|
||||||
mode: task::single_threaded,
|
|
||||||
foreign_stack_size: none
|
|
||||||
})
|
|
||||||
with task::get_opts(builder)
|
|
||||||
});
|
|
||||||
builder
|
builder
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -25,19 +25,11 @@ enum iotask {
|
|||||||
|
|
||||||
fn spawn_iotask(-builder: task::builder) -> iotask {
|
fn spawn_iotask(-builder: task::builder) -> iotask {
|
||||||
|
|
||||||
import task::{set_opts, get_opts, single_threaded, run};
|
task::set_sched_mode(builder, task::single_threaded);
|
||||||
|
|
||||||
set_opts(builder, {
|
|
||||||
sched: some({
|
|
||||||
mode: single_threaded,
|
|
||||||
foreign_stack_size: none
|
|
||||||
})
|
|
||||||
with get_opts(builder)
|
|
||||||
});
|
|
||||||
|
|
||||||
do listen |iotask_ch| {
|
do listen |iotask_ch| {
|
||||||
|
|
||||||
do run(copy(builder)) {
|
do task::run(copy(builder)) {
|
||||||
#debug("entering libuv task");
|
#debug("entering libuv task");
|
||||||
run_loop(iotask_ch);
|
run_loop(iotask_ch);
|
||||||
#debug("libuv task exiting");
|
#debug("libuv task exiting");
|
||||||
|
|||||||
Reference in New Issue
Block a user