Mercurial > hg > Members > kono > Cerium
diff TaskManager/kernel/schedule/SchedTask.cc @ 888:586ed400413a
call savedTask->write() in TaskArray finish.
TASK_LIST_MAIL is working now.
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Wed, 14 Jul 2010 23:54:36 +0900 |
parents | ab3cd3aeacff |
children | bed529c55eda |
line wrap: on
line diff
--- a/TaskManager/kernel/schedule/SchedTask.cc Wed Jul 14 20:40:33 2010 +0900 +++ b/TaskManager/kernel/schedule/SchedTask.cc Wed Jul 14 23:54:36 2010 +0900 @@ -53,6 +53,14 @@ // scheduler->mainMem_wait(); // これはなんで? manager = sc->manager; +#ifdef TASK_LIST_MAIL + if (list) + waiter = (memaddr) list->waiter; +#else + if (task) + waiter = (memaddr) task->self; +#endif + } @@ -102,8 +110,11 @@ scheduler->dma_wait(DMA_WRITE); free(writebuf); -#ifndef TASK_LIST_MAIL - scheduler->mail_write((memaddr)task->self); +#ifdef TASK_LIST_MAIL + if (!(cur_index < list->length) ) + scheduler->mail_write(waiter); +#else + scheduler->mail_write(waiter); #endif } @@ -115,9 +126,9 @@ if (cur_index < list->length) { // Task List が残っているので、次を準備 - TaskPtr nextTask = &list->tasks[cur_index++]; + TaskPtr nextTask = &list->tasks[cur_index]; SchedTask *nextSched = new SchedTask(); - nextSched->init(list, nextTask, cur_index, scheduler); + nextSched->init(list, nextTask, cur_index+1, scheduler); // この時点で、TaskList は down load が済んでないことがある // 最初のTaskの種類に関しては、別な情報で渡す方が良い // あるいはTaskListの最初には、TaskArray1/TaskArray を置かない? @@ -132,9 +143,6 @@ } return nextSched; } else { -#ifdef TASK_LIST_MAIL - scheduler->mail_write((memaddr)list->waiter); -#endif memaddr nextList = (memaddr)list->next; if (nextList == 0) { // もう何もする必要がない