diff TaskManager/kernel/ppe/TaskManagerImpl.cc @ 220:29e338dbc280

fix
author gongo@localhost.localdomain
date Mon, 09 Feb 2009 21:58:45 +0900
parents 44e3bf914155
children 58fd16298954
line wrap: on
line diff
--- a/TaskManager/kernel/ppe/TaskManagerImpl.cc	Mon Feb 09 00:12:40 2009 +0900
+++ b/TaskManager/kernel/ppe/TaskManagerImpl.cc	Mon Feb 09 21:58:45 2009 +0900
@@ -4,7 +4,7 @@
 #include "error.h"
 #include "../sys_task/SysTask.h"
 
-//static HTaskPtr systask_start;
+static HTaskPtr systask_start;
 static HTaskPtr systask_finish;
 
 void
@@ -15,12 +15,25 @@
 TaskManagerImpl::TaskManagerImpl(int num)
     : machineNum(num), activeTaskQueue(NULL), waitTaskQueue(NULL) {}
 
+/**
+ * 一番最初に PPE で実行される systask_start
+ * 一番最後に、全てのタスクの終了を待つ systask_finish
+ * 番兵的な意味で実装
+ */
 void
 TaskManagerImpl::systask_init(void)
 {
     systask_register();
 
+    systask_start = create_task(SYSTASK_START);
     systask_finish = create_task(SYSTASK_FINISH);
+
+    systask_start->spawn();
+
+    // systask_finish で spawn すると
+    //   systask_finish->wait_for(systask_finish);
+    // とかなって無限ループになるので、
+    // これだけは明示的に append_waitTask() で
     append_waitTask(systask_finish);
 }