std::rt: Remove an unnecessary allocation from the main sched loop

This commit is contained in:
Brian Anderson 2013-08-17 22:59:46 -07:00
parent 8fc1d9db21
commit 44c88ddf42

View File

@ -59,7 +59,7 @@ pub struct Task {
}
pub enum TaskType {
GreenTask(Option<~SchedHome>),
GreenTask(Option<SchedHome>),
SchedTask
}
@ -173,7 +173,7 @@ impl Task {
name: None,
coroutine: Some(Coroutine::new(stack_pool, stack_size, start)),
sched: None,
task_type: GreenTask(Some(~home)),
task_type: GreenTask(Some(home)),
borrow_list: None
}
}
@ -196,7 +196,7 @@ impl Task {
name: None,
coroutine: Some(Coroutine::new(stack_pool, stack_size, start)),
sched: None,
task_type: GreenTask(Some(~home)),
task_type: GreenTask(Some(home)),
borrow_list: None
}
}
@ -204,7 +204,7 @@ impl Task {
pub fn give_home(&mut self, new_home: SchedHome) {
match self.task_type {
GreenTask(ref mut home) => {
*home = Some(~new_home);
*home = Some(new_home);
}
SchedTask => {
rtabort!("type error: used SchedTask as GreenTask");
@ -216,7 +216,7 @@ impl Task {
match self.task_type {
GreenTask(ref mut home) => {
let out = home.take_unwrap();
return *out;
return out;
}
SchedTask => {
rtabort!("type error: used SchedTask as GreenTask");
@ -275,8 +275,8 @@ impl Task {
pub fn is_home_no_tls(&self, sched: &~Scheduler) -> bool {
match self.task_type {
GreenTask(Some(~AnySched)) => { false }
GreenTask(Some(~Sched(SchedHandle { sched_id: ref id, _}))) => {
GreenTask(Some(AnySched)) => { false }
GreenTask(Some(Sched(SchedHandle { sched_id: ref id, _}))) => {
*id == sched.sched_id()
}
GreenTask(None) => {
@ -291,8 +291,8 @@ impl Task {
pub fn homed(&self) -> bool {
match self.task_type {
GreenTask(Some(~AnySched)) => { false }
GreenTask(Some(~Sched(SchedHandle { _ }))) => { true }
GreenTask(Some(AnySched)) => { false }
GreenTask(Some(Sched(SchedHandle { _ }))) => { true }
GreenTask(None) => {
rtabort!("task without home");
}
@ -309,11 +309,11 @@ impl Task {
let sched_id = task.sched.get_ref().sched_id();
let sched_run_anything = task.sched.get_ref().run_anything;
match task.task_type {
GreenTask(Some(~AnySched)) => {
GreenTask(Some(AnySched)) => {
rtdebug!("anysched task in sched check ****");
sched_run_anything
}
GreenTask(Some(~Sched(SchedHandle { sched_id: ref id, _ }))) => {
GreenTask(Some(Sched(SchedHandle { sched_id: ref id, _ }))) => {
rtdebug!("homed task in sched check ****");
*id == sched_id
}