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) {
 	    // もう何もする必要がない