Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add a task::set_sched_mode function #2860

Merged
merged 1 commit into from
Jul 10, 2012
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 5 additions & 9 deletions src/libcore/os.rs
Original file line number Diff line number Diff line change
Expand Up @@ -163,15 +163,11 @@ mod global_env {
let builder_fn = || {
let builder = task::builder();
task::unsupervise(builder);
task::set_opts(builder, {
sched: some({
mode: task::single_threaded,
// FIXME (#2621): This would be a good place to use a
// very small foreign stack
foreign_stack_size: none
})
with task::get_opts(builder)
});

// FIXME (#2621): This would be a good place to use a very small
// foreign stack
task::set_sched_mode(builder, task::single_threaded);

builder
};
unsafe {
Expand Down
28 changes: 13 additions & 15 deletions src/libcore/task.rs
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ export builder;
export default_task_opts;
export get_opts;
export set_opts;
export set_sched_mode;
export add_wrapper;
export run;

Expand Down Expand Up @@ -237,6 +238,16 @@ fn set_opts(builder: builder, opts: task_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~()) {
/*!
* Add a wrapper to the body of the spawned task.
Expand Down Expand Up @@ -467,13 +478,7 @@ fn spawn_sched(mode: sched_mode, +f: fn~()) {
*/

let mut builder = builder();
set_opts(builder, {
sched: some({
mode: mode,
foreign_stack_size: none
})
with get_opts(builder)
});
set_sched_mode(builder, mode);
run(builder, f);
}

Expand Down Expand Up @@ -1207,14 +1212,7 @@ fn test_avoid_copying_the_body_unsupervise() {
#[test]
fn test_osmain() {
let buildr = builder();
let opts = {
sched: some({
mode: osmain,
foreign_stack_size: none
})
with get_opts(buildr)
};
set_opts(buildr, opts);
set_sched_mode(buildr, mode);

let po = comm::port();
let ch = comm::chan(po);
Expand Down
9 changes: 1 addition & 8 deletions src/libstd/uv_global_loop.rs
Original file line number Diff line number Diff line change
Expand Up @@ -40,14 +40,7 @@ fn get_monitor_task_gl() -> iotask unsafe {

let builder_fn = || {
let builder = task::builder();
task::set_opts(builder, {
supervise: false,
sched: some({
mode: task::single_threaded,
foreign_stack_size: none
})
with task::get_opts(builder)
});
task::set_sched_mode(builder, task::single_threaded);
builder
};

Expand Down
12 changes: 2 additions & 10 deletions src/libstd/uv_iotask.rs
Original file line number Diff line number Diff line change
Expand Up @@ -25,19 +25,11 @@ enum iotask {

fn spawn_iotask(-builder: task::builder) -> iotask {

import task::{set_opts, get_opts, single_threaded, run};

set_opts(builder, {
sched: some({
mode: single_threaded,
foreign_stack_size: none
})
with get_opts(builder)
});
task::set_sched_mode(builder, task::single_threaded);

do listen |iotask_ch| {

do run(copy(builder)) {
do task::run(copy(builder)) {
#debug("entering libuv task");
run_loop(iotask_ch);
#debug("libuv task exiting");
Expand Down