comparison 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
comparison
equal deleted inserted replaced
219:0f1ff7b06157 220:29e338dbc280
2 #include "TaskManagerImpl.h" 2 #include "TaskManagerImpl.h"
3 #include "types.h" 3 #include "types.h"
4 #include "error.h" 4 #include "error.h"
5 #include "../sys_task/SysTask.h" 5 #include "../sys_task/SysTask.h"
6 6
7 //static HTaskPtr systask_start; 7 static HTaskPtr systask_start;
8 static HTaskPtr systask_finish; 8 static HTaskPtr systask_finish;
9 9
10 void 10 void
11 noaction(void *p) 11 noaction(void *p)
12 { 12 {
13 } 13 }
14 14
15 TaskManagerImpl::TaskManagerImpl(int num) 15 TaskManagerImpl::TaskManagerImpl(int num)
16 : machineNum(num), activeTaskQueue(NULL), waitTaskQueue(NULL) {} 16 : machineNum(num), activeTaskQueue(NULL), waitTaskQueue(NULL) {}
17 17
18 /**
19 * 一番最初に PPE で実行される systask_start
20 * 一番最後に、全てのタスクの終了を待つ systask_finish
21 * 番兵的な意味で実装
22 */
18 void 23 void
19 TaskManagerImpl::systask_init(void) 24 TaskManagerImpl::systask_init(void)
20 { 25 {
21 systask_register(); 26 systask_register();
22 27
28 systask_start = create_task(SYSTASK_START);
23 systask_finish = create_task(SYSTASK_FINISH); 29 systask_finish = create_task(SYSTASK_FINISH);
30
31 systask_start->spawn();
32
33 // systask_finish で spawn すると
34 // systask_finish->wait_for(systask_finish);
35 // とかなって無限ループになるので、
36 // これだけは明示的に append_waitTask() で
24 append_waitTask(systask_finish); 37 append_waitTask(systask_finish);
25 } 38 }
26 39
27 HTaskPtr 40 HTaskPtr
28 TaskManagerImpl::create_task(int cmd) 41 TaskManagerImpl::create_task(int cmd)